私はSimple Injector IoCフレームワークを使用しており、実行時に依存関係の登録を変更したいと考えています。たとえば、A
とB
という2つの実装があり、インタフェースはI
です。実装A
はapp startに登録されていますが、実行時に変更される可能性のあるフラグによっては実装を切り替えたいと思います。私たちは現在、BaseController
のOnActionExecuting
イベントを行っており、すべてのコントローラが継承しています。ここで私がしようとしているもののサンプルコードです。実行時に単純なインジェクタを使用して依存関係の登録を変更するにはどうすればよいですか?
protected override void OnActionExecuting(
ActionExecutingContext filterContext)
{
if (IsRuntimeFlag)
{
// check current implementation type and
// change implementation to A
}
else
{
// check current implementation type and
// change implementation to B
}
base.OnActionExecuting(filterContext);
}
ご協力いただきありがとうございます。
if (IsRuntimeFlag)
{
container.Register<I, A>();
}
else
{
container.Register<I, B>();
}
又は均等の:場合IsRuntimeFlag
に
これはDIコンテナを使用するのではなく、ファクトリを戦略パターンと組み合わせることをお勧めします。オブジェクトグラフを早期に解決するには、コンテナを使用します。 [Composition Root](http://blog.ploeh.dk/2011/07/28/CompositionRoot.aspx)を参照してください。 – TrueWill
手動で行う必要がありますか? IOCコンテナフレームワークを使用するのはどうですか? –