簡體   English   中英

控制台應用程序中的.Net核心依賴項注入

[英].Net Core Dependency Injection in Console App

我正在嘗試在.NET Core控制台應用程序中使用依賴項注入。 關於它的文章很多,但是找不到解決我問題的文章。 我試圖使用來自aspnet核心Web應用程序的原始服務,這就是為什么我擁有WebHost。

我的主要問題是創建自己的類的實例,所有依賴項似乎都起作用,並且我的控制台應用程序啟動。

我的Program類中有以下代碼:

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;
    }
}

我不知道您的設置中是什么“容器”,但是通常您可以通過在ServiceCollection上調用BuildServiceProvider來創建服務提供者。

var provider = services.BuildServiceProvider();

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

不過,您首先需要在服務集合中注冊App以及所需的任何IProductService

在這種情況下,您甚至不需要創建自己的ServiceCollectionServiceProvider您可以使用已經具有的IWebHostServices屬性:

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

WebHost.CreateDefaultBuilder已經添加了日志記錄服務,因此也不需要這樣做。

注意:我假設您已經在Startup.ConfigureServices注冊了AppIProductService類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM