Добавление страниц Razor из другого проекта в основной проект веб-приложения BlazorC#

Место общения программистов C#
Ответить
Anonymous
 Добавление страниц Razor из другого проекта в основной проект веб-приложения Blazor

Сообщение Anonymous »

Я переместил страницу панели мониторинга Razor с шаблонами из серверного приложения Blazor в отдельный проект (RCL). Ошибок сборки/компиляции или выполнения нет. Проект запущен.
Я пытаюсь разработать модульное приложение Blazor, в котором каждый RCL будет работать как отдельный объект пользовательского интерфейса, и я смогу получить к нему доступ через меню навигации.
Это структура папок:

Код: Выделить всё

Folder PATH listing for volume DATA
Volume serial number is 2224-6101
E:.
?   WebPortal.slnx
?
+---WebPortal
?   ?   appsettings.Development.json
?   ?   appsettings.json
?   ?   Program.cs
?   ?   WeatherForecast.cs
?   ?   WebPortal.API.csproj
?   ?   WebPortal.API.csproj.user
?   ?   WebPortal.http
?   ?
?   +---Controllers
?   ?       WeatherForecastController.cs
?   ?
?   +---obj
?   ?   +---Debug
?   ?       +---net10.0
?   +---Properties
?           launchSettings.json
?
+---WebPortal.Core
?   ?   IModule.cs
?   ?   NavItem.cs
?   ?   WebPortal.Core.csproj
?
+---WebPortal.Module.Dashboard
?   ?   DashboardModule.cs
?   ?   ExampleJsInterop.cs
?   ?   WebPortal.Module.Dashboard.csproj
?   ?   _Imports.razor
?   +---Pages
?   ?       Dashboard.razor
?   ?       Dashboard.razor.css
?   ?
?   +---wwwroot
?           background.png
?           exampleJsInterop.js
?
+---WebPortal.UI
?   appsettings.Development.json
?   appsettings.json
?   Program.cs
?   WebPortal.UI.csproj
?   WebPortal.UI.csproj.user
?
+---bin
?   +---Debug
?       +---net10.0
?               appsettings.Development.json
?               appsettings.json
?               WebPortal.Core.dll
?               WebPortal.Core.pdb
?               WebPortal.Module.Dashboard.dll
?               WebPortal.Module.Dashboard.pdb
?               WebPortal.Module.Dashboard.staticwebassets.endpoints.json
?               WebPortal.Module.Dashboard.staticwebassets.runtime.json
?               WebPortal.UI.deps.json
?               WebPortal.UI.dll
?               WebPortal.UI.exe
?               WebPortal.UI.pdb
?               WebPortal.UI.runtimeconfig.json
?               WebPortal.UI.staticwebassets.endpoints.json
?               WebPortal.UI.staticwebassets.runtime.json
?
+---Components
?   ?   App.razor
?   ?   Routes.razor
?   ?   _Imports.razor
?   ?
?   +---Layout
?   ?       MainLayout.razor
?   ?       MainLayout.razor.css
?   ?       NavMenu.razor
?   ?       NavMenu.razor.css
?   ?       ReconnectModal.razor
?   ?       ReconnectModal.razor.css
?   ?       ReconnectModal.razor.js
?   ?
?   +---Pages
?           Counter.razor
?           Error.razor
?           Home.razor
?           NotFound.razor
?           Weather.razor
?
+---Helpers
?       AssemblyScanning.cs
?   +---Debug
?       +---net10.0
?           +---ref
?           ?       WebPortal.UI.dll
?           ?
?           +---refint
?           ?       WebPortal.UI.dll
?           ?
?           +---scopedcss
?           ?   +---bundle
?           ?   ?       WebPortal.UI.styles.css
?           ?   ?
?           ?   +---Components
?           ?   ?   +---Layout
?           ?   ?           MainLayout.razor.rz.scp.css
?           ?   ?           NavMenu.razor.rz.scp.css
?           ?   ?           ReconnectModal.razor.rz.scp.css
?           ?   ?
?           ?   +---projectbundle
?           ?           WebPortal.UI.bundle.scp.css
?           ?
?           +---staticwebassets
+---Properties
?       launchSettings.json
?
+---wwwroot
?   app.css
?   favicon.png
?
+---lib
+---bootstrap
+---dist
+---css
+---js
Когда я перехожу на https://localhost:7260/dashboard, я получаю следующее сообщение:

К сожалению, контент, который вы ищете, не существует

Это мои файлы Routes.razor и Program.cs:

Код: Выделить всё

Routes.razor:
@using WebPortal.UI.Helpers







Код: Выделить всё

Program.cs:
using WebPortal.UI.Components;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler( "/Error", createScopeForErrors: true );
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}

app.UseStatusCodePagesWithReExecute("/not-found", createScopeForStatusCodePages: true);
app.UseHttpsRedirection();

app.UseRouting();

app.UseAntiforgery();

app.MapStaticAssets();
app.MapRazorComponents()
.AddInteractiveServerRenderMode();

app.Run();

Код: Выделить всё

AssemblyScanning.cs:
public static class AssemblyScanning
{
// Thread-safe, lazy, cached result
private static readonly Lazy _cachedAssemblies =
new Lazy(LoadAssemblies, isThreadSafe: true);

public static List GetAssemblies()
{
return _cachedAssemblies.Value;
}

private static List LoadAssemblies()
{
List allAssemblies = new();

string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)!;

var files = Directory.GetFiles(path, "*.dll");

foreach (string dll in files.Where(x =>
Path.GetFileName(x).StartsWith("WebPortal.Module")))
{
// IMPORTANT: Use LoadFrom, not LoadFile
allAssemblies.Add(Assembly.LoadFrom(dll));
}

return allAssemblies
.Where(a => a.GetTypes()
.Any(t => t.GetInterfaces().Contains(typeof(IModule))))
.ToList();
}

public static IEnumerable GetTypes()
{
return GetAssemblies()
.SelectMany(a =>
a.DefinedTypes.Where(x =>
x.GetInterfaces().Contains(typeof(T))));
}

public static IEnumerable GetInstances()
{
foreach (Type implementation in GetTypes())
{
if (!implementation.IsAbstract)
{
yield return (T)Activator.CreateInstance(implementation)!;
}
}
}
}
Я немного застрял в том, что делать, чтобы страницы Razor работали из моего серверного приложения Blazor.

Подробнее здесь: https://stackoverflow.com/questions/798 ... pp-project
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»