2011-04-02 24 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

相关问题