首页 > 解决方案 > ASP.NET Core DI 直接访问容器

问题描述

有没有办法直接从类中访问 ASP.NET Core 的 DI 容器?

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

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

    }
}

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

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

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

标签: asp.net-core

解决方案


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

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

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


推荐阅读