В ASP.NET Core MVC все классы, которые реализуют Controller
, будут автоматически разрешены и добавлены в конвейер MVC.Эти контроллеры также могут быть введены в контейнер DI с помощью services.AddMvc().AddControllersAsServices();
У меня также есть контроллер, который также реализует специальный интерфейс, который я также могу добавить в контейнер DI: services.AddSingleton<IMyInterface, MyImpl>();
public class MyImpl : Controller, IMyInterface { }
Тем не менее, поскольку этот контроллер также реализует Controller
, он уже был добавлен в AddControllersAsServices()
, поэтому добавление его в контейнер DI еще раз приводит к тому, что будет два экземпляра этого класса.
Причиной такого дизайна является то, что у меня будет несколько реализаций IMyInterface
, и позже мне нужно будет решить, какую из них использовать, но каждая реализация также должна быть контроллером для предоставления определенных конечных точек API (каждый контроллер будет предоставлять разные конечные точки,так что там не будет никаких конфликтов).
Как я могу гарантировать, что будет создан только один экземпляр моего класса, и как тогда я могу получить все реализации IMyInterface
?