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

Muh*_*han 5 .net enterprise-library unity-container

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

interface a { }

interface b { }

class Apple: a,b
{
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我在两个接口上注册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());
Run Code Online (Sandbox Code Playgroud)

Chr*_*res 8

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

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