16

ASP.NET MVC プロジェクトで Simple Injector を使用しています。SimpleInjector.Integration.Web.Mvcnuget パッケージを追加しました。SimpleInjectorInitializerこれにより、フォルダにクラスが追加されApp_Start、DI が初期化されます。コードは次のようになります

public static void Initialize()
{
    // Did you know the container can diagnose your configuration? 
    // Go to: https://simpleinjector.org/diagnostics
    var container = new Container();

    //Container configuration code
    DependencyResolver.SetResolver(
        new SimpleInjectorDependencyResolver(container));
}

これにより、MVC コントローラーの DI が正しく構成されます。

私の質問は、コントローラー\クラスのいずれかでコンテナーのインスタンスを取得して、依存関係を手動で解決したい場合、どうすればよいかということです。

私は以前に AutoFac に取り組んできましたが、IComponentContext手動で解決する必要があるクラスに注入できる依存関係インターフェイスがあります。

更新

これがシナリオです。私のコントローラーは、初期化がコントローラーメソッドで渡された入力パラメーターに依存するサービスを使用しているため、構築時に依存関係をインスタンス化できません。

これは多少DIのアンチパターンであることは理解していますが、いくつかの場所では要件であるため、DIコンテナを注入することが次善の策です. シンプルなインジェクターのサンプルでは、​​回避したいコンテナーを共有するために静的変数を使用する必要がありますSimpleInjectorInitializer

4

1 に答える 1