アグリゲーションをモデル化し、後で依存性注入(What is dependency injection?を参照)を使用して、目的の機能を満たす必要があるオブジェクトを要求する必要があるようです。
各ノードはdomain modelのようになります。
このような何か:
明らか
public class A
{
// You inject some service IServiceX
public A(IServiceX serviceX)
{
ServiceX = serviceX;
}
private IServiceX ServiceX { get; }
// B is associated to A
public B B { get; set; }
// So you can do some stuff calling the whole ServiceX
public void DoStuff()
{
ServiceX.DoWhatever();
}
}
public class B
{
public B(IServiceY serviceY)
{
ServiceY = serviceY;
}
private IServiceY ServiceY { get; }
// C is associated to B
public C C { get; set; }
public void DoStuff()
{
ServiceY.DoWhatever();
}
}
public class C
{
public C(IServiceZ serviceZ)
{
IServiceZ = serviceZ;
}
private IServiceZ IServiceZ { get; }
public void DoStuff()
{
IServiceZ.DoWhatever();
}
}
、あなたはこれらの凝集体の一部にサービス以上のものを注入できます。各集約は他の集約に関連付けられているので、ツリーを横断できなければなりません。
私は、ツリー内のノードではなくノードにサブシステムを連結することを意味しました。私は依存性注入が有望だと思う。依存性注入は、既にインスタンス化されているオブジェクトを注入することを可能にするか、または各コンストラクタまたはプロパティに対して新しいインスタンスを注入するか? – Adam1980
@ Adam1980既存のインスタンスを挿入できます。 Caslte Windsorはそれを行うことができますが、他の人がこの能力を所有しているかどうかはわかりません。たとえば、 'container.Register(Component.Filter)。()。インスタンス(インスタンス))' –
@ Adam1980おそらくあなたはインスタンスを自分で作成したくないかもしれませんが、キャッスルウィンザーのようなバインディングライフスタイルは既に提供しています。 https://github.com/castleproject/Windsor/blob/master/docs/lifestyles.md#bound-to-nearestを参照してください。 –