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


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

我有类实现两个接口

MyService : IService1, IServier2 {}

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

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

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


10266
2018-06-20 08:07


起源

类似的问题。如果你使用 ContainerControlledLifetimeManager 注册第一个映射就足够了 IService1  - > MyService 那一生。 - Sebastian Weber


答案:


我经常写这个:

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

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

上面的代码适用于 PerResolveLifetimeManagerPerResolveLifetimeManagerPerThreadLifetimeManager


16
2018-06-21 06:33



它也适用于HierarchicalLifetimeManager。 - Alexander Vasilyev
你能给出app.config XML语法中的等价物吗? - Stephen Tunney


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

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

0
2017-11-13 02:08



它不起作用Resolve <IService1>()和Resolve <IService2>()返回2个不同的实例。 - Anthony Brenelière


我根据我的答案 @ 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" 是可选的,只有在您计划进行时才需要 命名实例


0
2017-12-27 03:05