Как зарегестрировать реализацию для нескольких интерфейсов в ASP.NET?
Я создал сервис, реализующий несколько интерфейсов, и пытаюсь зарегистрировать его на DI в ASP.Net Core. В моём случае, я хочу чтобы сервис был Singleton, и при запросе любого из реализуемых интерфейсов, потребитель получал один и тот-же экземпляр.
Проще говоря, я хочу что-то вроде
class Impl: IService1, IService2 { }
...
services.AddSingleton<IService1, IService2, Impl>();
...
public SomeController(IService1 service1, IService2 service2)
{
service1 == service2 // true, потому что это один и тот-же экземпляр
}
Как это можно сделать?
Ответы (1 шт):
Автор решения: bearpro
→ Ссылка
Вы можете зарегистрировать саму реализацию как сервис (с тем типом, который имеет сама реализация), и использовать этот сервис для получения реализаций отдельных интерфейсов.
Буквально, вот так:
services.AddSingleton<Impl>();
services.AddSingleton<IService1>(services => services.GetService<Impl>());
services.AddSingleton<IService2>(services => services.GetService<Impl>());
Это также должно сработать для Scoped-сервисов.