直接使用ASP.NET Core DI访问容器

时间:2018-10-19 10:05:19

标签: asp.net-core

是否可以直接从类访问ASP.NET Core的DI容器?

通常要做的是构造函数注入:

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

    }
}

相反,我想做类似的事情:

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

对于某些服务,我不想使用默认的构造函数注入,而是直接从容器中获取服务。

1 个答案:

答案 0 :(得分:1)

它称为服务定位器模式,可以通过注入IServiceProvider来完成

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

Here's很好的文章提出了不同的策略