ASP.NET Core DI 直接访问容器

3

有没有一种方法可以直接从类中访问ASP.NET Core的DI容器?

通常情况下,我们使用构造函数注入:

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

    }
}

相反,我想做类似于以下操作:

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

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

1个回答

3

这被称为服务定位器模式,可通过注入IServiceProvider实现。

public class ProductsController : Controller
{
    public ProductsController(IServiceProvider services)
    {
        var service = services.GetService<ISomeService>(); 
    }
}
这篇文章介绍了不同的策略,对于ASP.NET Core依赖注入有很好的指导作用。

是的,但如果您无法使用注入怎么办?我有一个后台任务调度程序,它不支持 DI,所以我必须手动创建服务... 有什么想法吗? - Choco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接