Я использовал ABP CLI сгенерировал шаблон MVC, с которым я хотел бы попробовать проект Blazor Server . Я добавляю модуль MyProjBlazorModule, который был таким же, как и у всех распространенных модулей, точно так же, как проект ConsoleTestApp :
namespace MyProj.Blazor
{
[DependsOn(
typeof(MyProjHttpApiClientModule),
typeof(AbpHttpClientIdentityModelModule)
)]
public class MyProjBlazorModule : AbpModule
{
}
}
Затем я добавил модуль как службу в ConfigureServices method:
public void ConfigureServices(IServiceCollection services)
{
services.AddSyncfusionBlazor();
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddSingleton<WeatherForecastService>();
services.AddApplication<TaurusBlazorModule>();
}
для быстрого теста, я также скопировал ClientDemoService класс из шаблона проекта MyProj.HttpApi.Client.ConsoleTestApp , и я использую его в мой index.razor, как это:
@inject ClientDemoService _clientService
...
protected override async Task OnInitializedAsync()
{
await base.OnInitializedAsync();
profile = await _clientService.RunAsync();
}
Но это не могло работать, с сообщением об ошибке в браузере:
InvalidOperationException: не был указан AuthenticationScheme, и не было найдено DefaultAuthenticateScheme. Схемы по умолчанию могут быть установлены с использованием AddAuthentication (строка defaultScheme) или AddAuthentication (Action configureOptions).
, в то время как если я копирую код, идентичный консольному тестовому проекту, например:
using (var application = AbpApplicationFactory.Create<MyProjConsoleApiClientModule>())
{
application.Initialize();
var demo = application.ServiceProvider.GetRequiredService<ClientDemoService>();
profile = AsyncHelper.RunSync(() => demo.RunAsync());
}
и все заработало. Я хотел бы знать разницу между использованием модуля ABP и явным вызовом здесь уродливого метода ServiceProvider, и как я могу исправить эту проблему некоторым правильным и красивым способом?
Спасибо за помощь всем!