Зарегистрируйте один и тот же тип для нескольких интерфейсов
Можно зарегистрировать один тип для нескольких интерфейсов?
У меня есть класс, реализующий два интерфейса
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"
является необязательным и требуется только в том случае, если вы планируете делать именованные экземпляры.