【问题标题】:.Net Core Dependency Injection in Console App控制台应用程序中的 .Net Core 依赖注入
【发布时间】:2018-09-27 06:01:22
【问题描述】:

我正在尝试在 .NET Core 控制台应用程序中使用依赖注入。 有很多关于它的文章,但没有找到解决我的问题的文章。 我正在尝试使用来自 aspnet 核心网络应用程序的原始服务,这就是我拥有 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>();

由于此错误,此代码将无法编译: “Container”不包含“GetInstance”的定义

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

public class App
{
    private readonly IProductService _productService;

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

【问题讨论】:

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


    【解决方案1】:

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

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

    WebHost.CreateDefaultBuilder 已经添加了日志服务,所以也不需要这样做。

    注意:我假设您已经在 Startup.ConfigureServices 中注册了您的 AppIProductService 类型。

    【讨论】:

    • .NET 6.0.100 ServiceCollection 已移至 Abstractions 库 - Microsoft.Extensions.DependencyInjection.Abstractions.dll - 添加对该库的引用会导致以下错误:“ServiceCollection”类型存在于'Microsoft.Extensions.DependencyInjection.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' 和 'Microsoft.Extensions.DependencyInjection, Version=5.0.0.1, Culture=neutral, PublicKeyToken=adb9793829ddae60' 添加 Microsoft.Extensions .DependencyInjection 6.0.0.0 明确没有解决问题
    • @Zirc75 您似乎同时引用了 5.0 和 6.0,这是不正确的,可以解释您显示的错误。
    【解决方案2】:

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

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

    不过,您需要先在服务集合中注册 App 和任何您想要的 IProductService

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-30
      • 1970-01-01
      • 2020-07-20
      相关资源
      最近更新 更多