私は自分のソリューションにIoCを実装するためにオートファックを使用していますが、私はそれが正しいかどうかは疑いありません。このシナリオは次のとおりです。
Manager
クラスはすべてBaseManager
クラスから派生しています。 BaseManager
にはprotected User CurrentUser
フィールドがあります。私がやろうとしているのは、CurrentUser
をAutofacで解決することです。私はIUserProvider
インターフェイスを作成し、いくつかのクラス(例えば、WebUserProvider
とWinformsUserProvider
)を実装しました。 ?私はシングルトンまたはサービスロケータパターンを使用することができます)私は依存関係(私のクラスでアクセスcontainer
を解決するにはどうすればよい正しい方法で依存注射を使用する
builder.Register(c => new WebUserProvider(...)).As<IUserProvider>();
- が、思わ:
それから私は、例えば、Global.asax)
に(次のように私のプロバイダを登録しましたそれはanti-patternだように。それでは、どのよう私は私の依存関係を解決する必要がありますか?
私はBaseManagerを定義し、そこにCurrentUserを初期化しなければなりませんでした。 (私はマネージャークラスのすべてのメソッドに現在のユーザーを渡したくなかった)あなたは「コンテナは一度に1つの場所で初期化する必要があります」と言ったので、サービスロケータとシングルトンが反パターンの場合、 1つのコンテナにアクセスできますか? – Kamyar
これはWinFormsアプリケーションの場合は、エントリポイント(mainメソッド)の近くにコンテナを作成して設定することができます。メインでもインタフェースを解決してメンバーに渡します。 ASP.NETでは、global.asaxで設定し、工場を登録することができます。例えば、[here](http://stackoverflow.com/questions/5124393/setting-up-inversion-of-control-ioc -in-asp-net-mvc-with-castle-windsor)を使用します。したがって、DIとIoCでは、すべての依存クラスに抽象クラスが注入され、明示的に要求されることはありません。 – oleksii