私たちは、アプリケーションのレイヤーを表す複数のプロジェクトがあるソリューションを持っています。例: あなたはコンテナへの参照を持っていないときにキャッスルウィンザープロパティの依存を解決することは可能ですか?
ドメイン
データ
ロジック
WebUIの
私たちの城ウィンザーコンテナは、当社のWeb層から参照され、我々はその後、私たちの層を介してこれらの依存関係をカスケード接続します。たとえば...
// In Domain
public interface IFooRepository
{
void DoSomething();
}
// In Data
public class FooRepository : IFooRepository
{
public void DoSomething()
{
// Something is done
}
}
// In Logic
public class MyThingManager
{
private readonly IFooRepository fooRepository;
public MyThingManager(IFooRepository fooRepository)
{
this.fooRepository = fooRepository;
}
public void AMethod()
{
this.fooRepository.DoSomething();
}
}
// In Web
// in some controller....
var newManager = new MyThingManager(WindsorContainer.Resolve<IFooRepository>());
newManager.DoSomething();
と私たちのマネージャーが自分の依存関係を持っているメンバーがたくさんあるまで、これはうまく動作します。このような状況が発生した場合、我々はマネージャの依存関係とその依存関係の不備を解決し、それらをウェブ層からカスケード化することになります。この結果はかなり大きいコンストラクタです。
たとえば、マネージャの内部コンポーネントがコンテナにアクセスすることなく自身の依存関係を解決するなど、より洗練された方法がありますか?
ウェブレイヤーだけがコンテナへのアクセス権を持っていることに注意してください(循環プロジェクトの依存性を防ぐため)、WebレイヤーのみがWindsorContainer.Resolve()ロジックレイヤーをアクティブにできるため、カスケード接続できませんコンテナ支援なしの依存関係は、Webレイヤーでそれを解決し、そのインターフェイスを使用してチェーンに渡すことでした。
"私たちは、マネージャの依存関係とその依存関係の不備を解決し、それらをウェブ層からカスケードすることになります。"私はこれを理解していない。コンストラクタインジェクションを使用して、コンテナが自動的に依存関係を型のコンストラクタに挿入させるとき、何の問題もないはずです。この問題を視覚化するコードをさらに表示すると便利です。 – Steven