[解決済み] ASP.NET Core内蔵のDIコンテナでサービス登録の置き換え?
2023-06-09 08:45:01
質問
のサービス登録について考えてみましょう。
Startup.ConfigureServices
:
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<IFoo, FooA>();
}
を変更することは可能ですか?
IFoo
への登録は可能ですか?
FooB
後
AddTransient
が呼び出された後ですか?これはテスト目的で役に立つことがあります (たとえば
TestStartup
サブクラス)、またはコードベースへのアクセスが制限されている場合に役立ちます。
もし、別の
IFoo
の実装になります。
services.AddTransient<IFoo, FooA>();
services.AddTransient<IFoo, FooB>();
次に
GetService<IFoo>
は
FooB
の代わりに
FooA
:
IFoo service = services.BuildServiceProvider().GetService<IFoo>();
Assert.True(service is FooB);
しかし
GetServices<IFoo>
は両方の実装を正常に返します(同じように
GetService<IEnumerable<IFoo>>
):
var list = services.BuildServiceProvider().GetServices<IFoo>().ToList();
Assert.Equal(2, list.Count);
そこには
Remove(ServiceDescriptor)
メソッドがあります。
IServiceCollection
という契約をしています。をどうすればいいのでしょうか?
ServiceDescriptor
を使用してサービス登録を変更できますか?
どのように解決するのですか?
これは、単純に
Replace(IServiceCollection, ServiceDescriptor)
メソッドから
ServiceCollectionDescriptorExtensions
クラスで使用されます。
// IFoo -> FooA
services.AddTransient<IFoo, FooA>();
// Replace
// IFoo -> FooB
var descriptor =
new ServiceDescriptor(
typeof(IFoo),
typeof(FooB),
ServiceLifetime.Transient);
services.Replace(descriptor);
も参照してください。
関連
-
[解決済み】ASP.NET Core Dependency Injectionのエラーです。アクティブ化しようとしているときに、タイプのサービスを解決できません。
-
[解決済み】取り消せないメンバはメソッドのように使えない?
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
[解決済み] ASP.NET CoreでカスタムのAuthorizeAttributeを作成する方法は?
-
[解決済み] ConfigureServices内からASP.NET Core DIでインスタンスを解決する
-
[解決済み] ASP.NET Core Web APIの例外処理
-
[解決済み] ASP.NET Coreで.jsonファイルからAppSettingsの値を読み込む方法
-
[解決済み] ASP.NET CoreでAutomapperを設定する方法
-
[解決済み】.NET CoreとASP.NET Coreの比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] エンティティタイプ ApplicationUser は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み] [Entity Framework 4.1でエンティティに関連オブジェクトを追加する際に、エンティティオブジェクトをIEntityChangeTracker.の複数のインスタンスから参照できない。
-
[解決済み】統合マネージドパイプラインモードで適用されないASP.NETの設定が検出された
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み】Sequence contains no matching element(シーケンスにマッチする要素がない
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み] UnityでOnCollisionEnterが呼ばれない
-
[解決済み】ファイルやアセンブリ、またはその依存関係の1つをロードできませんでした。