Контейнер доступа ASP.NET Core DI напрямую - PullRequest
0 голосов
/ 19 октября 2018

Есть ли способ доступа к контейнеру DI ASP.NET Core непосредственно из класса?

Обычно выполняется инжекция конструктора:

public class ProductsController : Controller
{
    public ProductsController(ISomeService service)
    {

    }
}

Вместо этого я хотел бы сделать что-то вроде:

var service = ServiceLocator.GetService<ISomeService>();

Для некоторых служб я не хотел быиспользуйте инъекцию конструктора по умолчанию, но лучше получите сервис прямо из контейнера.

1 Ответ

0 голосов
/ 19 октября 2018

Он называется Шаблон локатора службы и может быть выполнен путем введения IServiceProvider

public class ProductsController : Controller
{
    public ProductsController(IServiceProvider services)
    {
        var service = services.GetService<ISomeService>(); 
    }
}

Вот хорошая статья, в которой рассматриваются различные стратегии

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...