2012-05-28 38 views
1

我試圖模擬溫莎的「每圖」生活方式,以正確的方式解決我的對象。我嘗試過Bound的生活方式,但沒有取得任何成功,可能是因爲缺乏對這個主題的瞭解。 我需要在下面的示例代碼表示:模擬溫莎城堡的「每圖」生活方式

class Program 
{ 
    static void Main(string[] args) 
    { 
     var container = new WindsorContainer(); 
     container.Register(
      Component.For<ClassA>().LifestyleBoundTo<ClassC1>(), 
      //Component.For<ClassA>().LifestyleBoundTo<ClassC2>(), 
      Component.For<ClassB1>().LifeStyle.Transient, 
      Component.For<ClassB2>().LifeStyle.Transient, 
      Component.For<ClassC1>().LifeStyle.Transient, 
      Component.For<ClassC2>().LifeStyle.Transient); 

     var c1 = container.Resolve<ClassC1>(); 
     Assert.AreSame(c1.B1.A, c1.A); 

     var c2 = container.Resolve<ClassC2>(); 
     Assert.AreSame(c2.B2.A, c2.A); 

     Assert.AreNotSame(c1.A, c2.A); 
    } 
} 

class ClassA 
{ 
} 

class ClassB1 
{ 
    public ClassB1(ClassA a) 
    { 
     A = a; 
    } 

    public ClassA A { get; set; } 
} 

class ClassC1 
{ 
    public ClassC1(ClassA a, ClassB1 b1) 
    { 
     A = a; 
     B1 = b1; 
    } 

    public ClassA A { get; set; } 
    public ClassB1 B1 { get; set; } 
} 

class ClassB2 
{ 
    public ClassB2(ClassA a) 
    { 
     A = a; 
    } 

    public ClassA A { get; set; } 
} 

class ClassC2 
{ 
    public ClassC2(ClassA a, ClassB2 b2) 
    { 
     A = a; 
     B2 = b2; 
    } 

    public ClassA A { get; set; } 
    public ClassB2 B2 { get; set; } 
} 

} 
+0

更新 –

+0

我也面臨着類似的問題的答案: http://stackoverflow.com/questions/25064516/dependency-injection-lifestyle-service-shared-instance-between-2-instances-of?noredirect = 1#comment39052582_25064516 如果您找到答案,請讓我知道。 –

回答

0

好了,所以這一切按預期工作。

您的第一個斷言符合預期。第二個按預期失敗,因爲您的範圍是ClassA,每ClassC1,圖中沒有該類的實例用於第二個解決方案。

+0

我已經更新了完整的測試代碼 – Antonio

+0

的帖子有一種方法可以將ClassA也用於ClassC2嗎?在我的項目中,我有一個被許多核心組件引用的特殊類。對於每個核心組件,我只需要一個特殊類的共享實例。 – Antonio

+0

你的核心組件有一個共同的接口,他們都實現? –