我想找出兩個其他兩個類之間共享類的實例的最佳方式。在溫莎城堡的其他類之間共享類的實例
說我有這些類:
class A
{
public A(B b, C c) {}
}
class B
{
public B(IDFactory factory) {}
}
class C
{
public C(IDFactory factory) {}
}
interface IDFactory
{
D GetD();
}
class D {}
併爲A
每個實例,我想c
和d
曾經是D
單一實例的D
。當我創建的A
一個新實例(使用說一廠),我想c
和d
分享D.
到目前爲止,我已經想通,使用使用上下文定製的生活方式(使用this酷庫)可能是最好的方法。所以我會做這樣的事情:
WindsorContainer container = new WindsorContainer();
[.. standard container registration stuff ..]
container.Register(Component.For<D>().LifeStyle.Custom<ContextualLifestyle>());
IAFactory factory = container.Resolve<IAFactory>();
using (new ContainerContext(container))
{
A a = factory.GetA();
}
現在我有這個問題是我在這裏我用的是工廠的點來定義的上下文。理想情況下,D
是半暫時的,並且每個實例A
應該有一個實例的概念將在我註冊所有類型時在容器中配置。另一個問題是上下文需要容器本身的一個實例,這違背了三個容器調用模式。
任何人都可以提出一個更好的方式來設置這種事情,無論是使用溫莎或更好的架構。同時要記住D可能在班級層面很深,例如A -> B -> C -> E -> F -> G -> D
,我想避免將D
一直沿着樹狀路線傳遞。
我覺得你在某個地方有漏洞抽象。爲什麼要將IDFactory注入B和C?這強烈地表明B和C將在其生命週期中創建D的多個實例,但是然後您會問如何配置Castle以便始終獲得相同的實例。簡單地向B和C注入D實例會更有意義。 – 2011-01-31 10:03:07
你說得對,這正是我想要做的。我將如何去注入相同的D實例到B和C? – Geoff 2011-01-31 10:07:24