c# - 如何在不将服务注入 .netcore 的情况下从服务中获取注册实例
问题描述
我在我的Startup.cs
. 而不是创建一个新的实例SomeService
,我怎样才能得到注册的实例SomeService
而不将它注入我的TestService
?
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ISomeService, SomeService>();
}
public class TestService()
{
public void DoSomething()
{
var SomeService service = new SomeService();
}
}
解决方案
您仍然需要访问服务容器,因此您需要以IServiceProvider
某种方式注入或提供它,然后您可以调用GetService<T>
提供者并手动检索实例(或任何其他)。
例如:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ISomeService, SomeService>();
}
public class TestService()
{
private readonly IServiceProvider _provider;
public TestService(IServiceProvider provider)
{
_provider = provider;
}
public void DoSomething()
{
var service = _provider.GetService<ISomeService>();
}
}
如果您将此作为测试的一部分,您可以构建自己的容器,例如:
var serviceProvider = new ServiceCollection()
.AddSingleton<ISomeService, SomeService>()
.BuildServiceProvider();
推荐阅读
- c++ - 如何在 C++ 中获取预加载的模块名称
- git - 来自第二个拉取请求的提交
- excel - 用于通过多个序列隐藏和取消隐藏的用户表单循环
- javascript - 网站在单个网络上崩溃,但在其他任何地方都可以使用
- reactjs - 从 Redux Store in Action Creator 获取状态的最佳方式
- c++ - 遍历不包括最后一个元素的列表容器
- solace - Solace Remote VPN Bridge over SSL - 证书链中的自签名证书
- ruby-on-rails - Rails 默认选择值
- javascript - 将单词拆分为字母并获取每个字母的数据?
- css - CSS Grid - 对齐/对齐属性中 flex-start 和起始值之间的区别