Blazor Serverプロジェクトを試してみたい MVC テンプレートを生成したABP CLIを使用しました。ConsoleTestApp プロジェクトと同じように、すべての共通モジュールと同じ MyProjBlazorModule を追加します。
namespace MyProj.Blazor
{
[DependsOn(
typeof(MyProjHttpApiClientModule),
typeof(AbpHttpClientIdentityModelModule)
)]
public class MyProjBlazorModule : AbpModule
{
}
}
次に、モジュールをサービスとしてConfigureServices メソッドに追加しました。
public void ConfigureServices(IServiceCollection services)
{
services.AddSyncfusionBlazor();
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddSingleton<WeatherForecastService>();
services.AddApplication<TaurusBlazorModule>();
}
迅速なテストのために、テンプレート プロジェクトMyProj.HttpApi.Client.ConsoleTestAppからClientDemoServiceクラスもコピーし、次のように index.razor で使用します。
@inject ClientDemoService _clientService
...
protected override async Task OnInitializedAsync()
{
await base.OnInitializedAsync();
profile = await _clientService.RunAsync();
}
しかし、ブラウザにエラーメッセージが表示され、機能しませんでした:
InvalidOperationException: authenticationScheme が指定されておらず、DefaultAuthenticateScheme が見つかりませんでした。デフォルトのスキームは、AddAuthentication(string 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メソッドを明示的に呼び出すことの違いを知りたいのですが、どうすればこの問題を正しく美しい方法で修正できますか?
みんなの助けに感謝します!