2011-04-02 20 views
5

我有兩個接口都是由類蘋果實現現在爲什麼統一返回相同的實例只有一個爲ContainerControlledLifeTimeManager

interface a { } 

interface b { } 

class Apple: a,b 
{ 
} 

如果我註冊蘋果對陣雙方的接口,但是隻有一個是使用ContainerControlledLifeTimeManager,然後解析其他接口也返回相同的實例。爲什麼這是它的方式,無論如何要解決它?

IUnityContainer container = new UnityContainer(); 
container.RegisterType<a, Apple>(new ContainerControlledLifetimeManager()); 
container.RegisterType<b, Apple>(); 
var a = container.Resolve<a>(); 
Console.WriteLine(container.Resolve<b>().Equals(a).ToString()); 

回答

8

注入配置是針對實現類而不是接口完成的。這包括終身。因此,當您爲Apple設置容器控制的生命週期時,無論您使用哪種界面,它始終是相同的實例。

如果您確實需要具有不同生命週期的相同類型的不同接口,則此時唯一的選項將被命名爲註冊。

+0

剛剛驗證了你的答案。你是對的。但是你關於注入配置的陳述是違​​背類的,是全局的,適用於所有IOC容器還是僅適用於Unity?任何官方參考? – 2011-04-04 20:06:39

+0

這就是Unity的工作原理。其他容器可能,也有一些我確實做了其他決定。我所知道的IOC容器沒有ISO標準。 :-) – 2011-04-05 00:04:43

+0

我顯然意味着事實上的標準而不是ISO標準,但感謝您的回答。 – 2011-04-05 04:24:59

相關問題