控制台应用程序中的.Net核心依赖项注入

时间:2018-09-27 06:01:23

标签: c# asp.net-core .net-core console-application

我正在尝试在.NET Core控制台应用程序中使用依赖项注入。 关于它的文章很多,但是找不到解决我问题的文章。 我正在尝试使用来自aspnet核心Web应用程序的原始服务,这就是为什么我拥有WebHost。

我的主要问题是创建自己类的实例,所有依赖项似乎都起作用,并且我的控制台应用程序启动了。

我的程序类中有以下代码:

static void Main(string[] args)
{            
    var host = WebHost.CreateDefaultBuilder(args)
        .UseKestrel(options => options.AddServerHeader = false)
        .UseStartup<Startup>()
        .Build();

    var services = new ServiceCollection().AddLogging();            
    var container = new Container();           
    var serviceProvider = container.GetInstance<IServiceProvider>();

由于以下错误,该代码将无法编译: “容器”不包含“ GetInstance”的定义

如何创建具有此实现的自定义类App的实例:

public class App
{
    private readonly IProductService _productService;

    public App(IProductService productService)
    {
        _productService = productService;
    }
}

2 个答案:

答案 0 :(得分:1)

我不知道您的设置中是什么“容器”,但是通常您可以通过在ServiceCollection上调用BuildServiceProvider来创建服务提供商。

var provider = services.BuildServiceProvider();

var instance = provider.GetService<App>();

尽管如此,您首先需要在服务集合中同时注册App和所需的IProductService

答案 1 :(得分:1)

在这种情况下,您甚至不需要创建自己的ServiceCollectionServiceProvider-您可以使用已经拥有的IWebHost的{​​{3}}属性:

var app = host.Services.GetService<App>();

WebHost.CreateDefaultBuilder已经添加了日志记录服务,因此也不需要这样做。

注意:我假设您已经在App中注册了IProductServiceStartup.ConfigureServices类型。