アプリケーションの周りにIoCコンテナを渡し、サービスロケータのように使用することは悪い習慣であると一般に認められています。キャッスルウィンザーでスコープライフスタイルを使用することはできますか?
私はアプリケーションのコンポジットルートでのみコンテナを使用し、Resolve()を1回呼び出す傾向があります。アプリケーションの最上位レベルのオブジェクトを解決し、コンテナに応答して、オブジェクトグラフ
城ウィンザーは最近、「使用」ブロック内でcontainer.BeginScope()を呼び出すことができるスコープ付きのライフスタイルを追加しました。この「使用する」ブロック内から、スコープのあるライフスタイルで登録されたコンポーネントを解決すると、「使用」ブロックの期間、毎回同じインスタンスが返されます。
container.Register(Component.For<A>().LifestyleScoped());
using (container.BeginScope())
{
var a1 = container.Resolve<A>();
var a2 = container.Resolve<A>();
Assert.AreSame(a1, a2);
}
質問: BeginScopeは()コンテナ上の拡張メソッドであることを考えると、私は「コンテナが周りに渡されない限り、スコープのライフスタイルは、アプリケーションで使用できるか確認するために失敗する(これは私は本当にドンtはしたい)。スコープのあるライフスタイルをどこで/どのように使用できるかの例は誰にもありますか?
おかげで、
トム
スコープされたライフスタイルをどのように使用する予定ですか? –
こんにちはKrzystof、私はスコープライフスタイルをまだ使用する予定はありません。私はスコープのあるライフスタイルを将来どのように使いたいかという点について、いくつかの例を見たいと思っていました。 工場内でそれを使用するのは、論理的なアプローチのようです。 –
これは私が必要とするものに似ているようですが、スコープ内のインスタンスをコンストラクタ、同じスコープ内のオブジェクトの依存として解決することはできません: http://stackoverflow.com/questions/25064516/dependency-injection-lifestyle- 2インスタンス間のサービス共有インスタンス - –