如果类型是针对两个不同的接口注册但只有一个作为ContainerControlledLifeTimeManager,则为什么unity返回相同的实例

时间:2011-04-02 11:23:33

标签: .net unity-container enterprise-library

我有两个接口,都是由Apple类实现的

interface a { }

interface b { }

class Apple: a,b
{
}

现在,如果我在两个接口上注册Apple,但只有一个使用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());

1 个答案:

答案 0 :(得分:8)

注入配置是针对实现类而不是接口完成的。这包括寿命。因此,当您为Apple设置容器控制的生命周期时,无论您使用哪个接口,它都将始终是相同的实例。

如果您确实需要具有不同生命周期的相同类型的不同接口,此时此唯一选项将被命名为注册。