1

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メソッドを明示的に呼び出すことの違いを知りたいのですが、どうすればこの問題を正しく美しい方法で修正できますか?

みんなの助けに感謝します!

4

1 に答える 1