12

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

我有实现两个接口的类

MyService : IService1, IServier2 {}

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

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

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

4

3 回答 3

17

我通常这样写:

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

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

上面的代码适用于PerResolveLifetimeManager, PerResolveLifetimeManager, PerThreadLifetimeManager

于 2012-06-21T06:33:10.567 回答
0

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

<register type="MyService" name="MyServiceName">
    <lifetime type="singleton" />
</register>
<register type="IService1" mapTo="MyService" />
<register type="IService2" mapTo="MyService" />
于 2015-11-13T02:08:32.053 回答
0

我的回答基于@StephenTunney 的回答,但我无法让他工作。

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

<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"是可选的,仅当您计划执行命名实例时才需要。

于 2017-12-27T03:05:27.320 回答