Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core ASP.NET核心DI直接访问容器_Asp.net Core - Fatal编程技术网

Asp.net core ASP.NET核心DI直接访问容器

Asp.net core ASP.NET核心DI直接访问容器,asp.net-core,Asp.net Core,是否有一种直接从类访问ASP.NET Core的DI容器的方法 通常所做的是构造函数注入: public class ProductsController : Controller { public ProductsController(ISomeService service) { } } 相反,我想做如下事情: var service = ServiceLocator.GetService<ISomeService>(); var service=S

是否有一种直接从类访问ASP.NET Core的DI容器的方法

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

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

    }
}
相反,我想做如下事情:

var service = ServiceLocator.GetService<ISomeService>();
var service=ServiceLocator.GetService();
对于某些服务,我不想使用默认构造函数注入,而是直接从容器获取服务。

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

public class ProductsController : Controller
{
    public ProductsController(IServiceProvider services)
    {
        var service = services.GetService<ISomeService>(); 
    }
}
公共类产品控制器:控制器
{
公共产品控制员(IServiceProvider服务)
{
var service=services.GetService();
}
}

这是一篇很好的文章,其中介绍了不同的策略

是的,但是如果你不能使用注射怎么办。我有一个后台任务调度程序,它不支持DI,所以我必须手动装箱服务。。。有什么想法吗?