asp.net-core - ASP.NET Core DI 直接访问容器
问题描述
有没有办法直接从类中访问 ASP.NET Core 的 DI 容器?
通常所做的是构造函数注入:
public class ProductsController : Controller
{
public ProductsController(ISomeService service)
{
}
}
相反,我想做类似的事情:
var service = ServiceLocator.GetService<ISomeService>();
对于某些服务,我不想使用默认的构造函数注入,而是直接从容器中获取服务。
解决方案
它被称为服务定位器模式,可以通过注入 IServiceProvider 来完成
public class ProductsController : Controller
{
public ProductsController(IServiceProvider services)
{
var service = services.GetService<ISomeService>();
}
}
这是一篇很好的文章,介绍了不同的策略
推荐阅读
- google-chrome-extension - Chrome 网络扩展 DeclarativeNetRequest 不会阻止 main_frame 中的拦截请求
- python - 如何比较多个字典以找出重复的键以及重复的次数
- android - 如何编译扩展我的片段的类
- bash - 如何在shell中提取两个单词之间的值
- c# - 对角线运动比正常运动更快
- python - 如何在 matplotlib 补丁集合中设置限制
- javascript - 将表单从父级和 iframe 提交到同一个目标
- python - 通过 pyodbc 从 Python 连接到 Db2 时出错
- java - 如何将“hadoop jar”命令迁移到 GCP?
- dc.js - dc.js 表——选择行,突出显示 onclick 并为 Crossfilter 应用过滤器