2
私はASP.NET Coreを使用しており、実行時にIServiceProviderにサービスを追加したいので、DI経由でアプリケーション全体で使用できます。DI経由でランタイムにサービスを登録しますか?
たとえば、ユーザーは設定コントローラにアクセスし、認証設定を「オン」から「オフ」に変更することがあります。そのインスタンスでは、実行時に登録されたサービスを置き換えたいと思います。設定コントローラで
擬コード:
if(settings.Authentication == false)
{
services.Remove(ServiceDescriptor.Transient<IAuthenticationService, AuthenticationService>());
services.Add(ServiceDescriptor.Transient<IAuthenticationService, NoAuthService>());
}
else
{
services.Remove(ServiceDescriptor.Transient<IAuthenticationService, NoAuthService>
services.Add(ServiceDescriptor.Transient<IAuthenticationService, AuthenticationService>());
}
IServiceCollectionがIServiceProviderに内蔵されていなかったので、私は私のStartup.csでそれをやっているときに、このロジックは正常に動作します。しかし、Startupが既に実行された後でこれを実行できるようにしたい。これが可能なのか誰にも分かりますか?
うん、それは正しいアプローチです! –
@Dawidあなたはこれが「正しいアプローチ」だとどのような権限で言いますか?あなたは_「これもそうだろう」という意味ですか?どうして?なぜそれは良い答えですか? – CodeCaster
Design Patternsの観点からは、いくつかの詳細を隠すファクトリ(この場合はいくつかの設定/設定を取得する)を登録して、適切な実装を提供するほうがよいからです。 –