Зарегистрируйте один и тот же тип для нескольких интерфейсов

Можно зарегистрировать один тип для нескольких интерфейсов?

У меня есть класс, реализующий два интерфейса

MyService : IService1, IServier2 {}

Я хотел бы зарегистрировать этот тип для обоих интерфейсов.

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

К сожалению, во время после разрешения у меня есть два разных экземпляра. Я пробовал использовать общий срок службы, но потом получил сообщение, которое не могу.

Ответ 1

Я обычно пишу это:

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

Конечно, с TransientLifetimeManager вы все равно получите два разных экземпляра MyService.

Код выше работает с PerResolveLifetimeManager, PerResolveLifetimeManager, PerThreadLifetimeManager.

Ответ 2

Вы также можете сделать это через config:

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

Ответ 3

Я основывался на ответе @StephenTunney, но я не мог заставить его работать.

Вы также можете сделать это через config:

<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" является необязательным и требуется только в том случае, если вы планируете делать именованные экземпляры.