首页 > 解决方案 > 如何在不将服务注入 .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();
    }
}

标签: c#asp.net-core-webapi

解决方案


您仍然需要访问服务容器,因此您需要以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();

推荐阅读