将相同类型注册到多个接口

时间:2012-06-20 08:07:28

标签: unity-container

可以将一种类型注册到多个接口吗?

我有实现两个接口的类

MyService : IService1, IServier2 {}

我想为这两个接口注册这种类型。

container.RegisterType<IService1, MyService>(CreateLifetime());
container.RegisterType<IService2, MyService>(CreateLifetime());

不幸的是,在解决之后,我有两个不同的实例。我试过使用共同的生命,但后来我收到了我不能的消息。

3 个答案:

答案 0 :(得分:16)

我通常写这个:

      .RegisterType<MyService>(CreateLifeTime())
      .RegisterType<IService1, MyService>()
      .RegisterType<IService2, MyService>();

当然,使用TransientLifetimeManager,您仍将获得两个不同的MyService实例。

上述代码适用于PerResolveLifetimeManagerPerResolveLifetimeManagerPerThreadLifetimeManager

答案 1 :(得分:0)

您也可以通过配置执行此操作:

<register type="MyService" name="MyServiceName">
    <lifetime type="singleton" />
</register>
<register type="IService1" mapTo="MyService" />
<register type="IService2" mapTo="MyService" />

答案 2 :(得分:0)

我的答案基于@StephenTunney's answer,但我无法让他上班。

您也可以通过配置执行此操作:

<register type="MyService" name="MyServiceName">
    <lifetime type="singleton" />
</register>
<register type="IService1" mapTo="MyService">
    <lifetime type="singleton" />
</register>
<register type="IService2" mapTo="MyService">
    <lifetime type="singleton" />
</register>

请注意,name="MyServiceName"是可选的,只有在您计划执行named instances时才需要。