【问题标题】:Access configuration through dependency injection in .NET Core console application通过 .NET Core 控制台应用程序中的依赖注入访问配置
【发布时间】:2016-10-17 08:22:51
【问题描述】:

如何正确激活使用 ServiceCollection.Configure 函数添加的配置?

     public static void Main(args[] args)
     { 
        serviceCollection = new ServiceCollection();
        serviceCollection .Configure<MyOptions>(Configuration.GetSection("options"));
        Services = serviceCollection.BuildServiceProvider();

        ActivatorUtilities.CreateInstance<MyOptions>(Services);
        ActivatorUtilities.CreateInstance<SomeClassThatNeedsoptions>(Services);
     }


 public SomeClassThatNeedsoptions(IOptions<MyOptions> options)
 {
     _options = options.Value;
 }

在第二个 ActivatorUtilities.CreateInstance 我收到以下错误

无法解析类型“Microsoft.Extensions.Options.IOptions [MyOptions]`的服务

我正在控制台应用程序中编写此代码,据我所知,我正在使用 ActivatorUtilities 类手动注入依赖项。我似乎可以使用 AddSingleton 添加的服务来做到这一点,但不能使用 .Configure 添加的服务来完成

【问题讨论】:

  • 您的问题有点混乱/不清楚。您在 main 方法中创建 ServiceCollection() 并从中构建服务提供者(您在控制台应用程序中执行此操作),但您的问题被标记为 ASP.NET Core。现在是什么?控制台还是 ASP.NET Core?在 ASP.NET 核心中,您可以通过 Startup.cs 和 ConfigureServices/Configure 方法完成此操作
  • 第二,为什么使用ActivatorUtilities而不是通过Services.GetService&lt;T&gt;()解析?
  • 嗨 tseng,很抱歉造成混乱,我真的是 aspnetcore 的新手。这是一个使用 aspnetcore ioc 的控制台应用程序。我认为激活实用程序用于将服务注入类(构造函数注入),而不是传递服务提供者。
  • 在这里查看我的答案,stackoverflow.com/a/39605743/455493。虽然它是关于没有端点的微服务(这实际上使它成为一个普通的控制台后台服务),但它展示了如何“引导”一个控制台应用程序。基本上你有一个类,它启动你的应用程序并注入所需的服务来完成工作。从那里一切都应该由 IoC 解决(通过构造函数注入或工厂模式)。在我的示例中,MyHost 将是您的类,它会依赖于可以依赖于自己的东西等。
  • 另外,Microsoft.Extension.DependencyInjection 并不特定或仅限于 ASP.NET Core,可以在没有 ASP.NET Core 的情况下使用(即 Microsoft Orleans 也使用它)

标签: c# dependency-injection asp.net-core asp.net-core-1.0


【解决方案1】:

尝试在实例化 ServiceCollection 后立即添加

serviceCollection.AddOptions();

【讨论】:

    【解决方案2】:

    请参阅此链接,该链接有一个很好的答案,适用于“从类库访问 Asp.net-core 中的 appsetting.jsonhttps://stackoverflow.com/a/39548459/966557?stw=2。 它适用于我的应用程序。

    但请注意,我不确定它是否适用于基于控制台的应用程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-20
      • 1970-01-01
      • 2014-11-15
      • 1970-01-01
      • 2016-11-02
      • 2016-12-07
      • 1970-01-01
      相关资源
      最近更新 更多