2016-05-19 24 views
1

在我Startup.cs,我有以下样板代码:ASP.NET核心:访问和重新使用配置对象

public Startup(IHostingEnvironment env) 
{ 
    var builder = new ConfigurationBuilder() 
     .SetBasePath(env.ContentRootPath) 
     .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) 
     .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) 
     .AddEnvironmentVariables(); 
    Configuration = builder.Build(); 
} 

我想要做的就是访问和重新使用已建Configuration对象与我的项目中的其他地方的控制器,而不必在那里建立一个新的配置对象。我该怎么做,甚至有可能?

+0

问题是:你为什么要这样做?我想不出为什么你需要'IConfigurationRoot'元素,除了固化启动/引导以外的任何地方。你应该读取配置并将其反序列化为'IOptions '类型,可以在任何地方注入 – Tseng

+0

同意。感谢您的意见。 – robbpriestley

回答

0

您有几种选择:

  1. 存储在一个全局变量的配置对象。
    • 临:简单。
    • Con:创建耦合并让所有人都知道Configuration对象。没有DI。没有类型安全。
  2. 将配置对象添加到DI容器,并在需要的地方使用它。
    • 临:解耦。支持DI。答:您让其他组件知道配置。没有类型安全。
  3. 通过使用IOptions或使用ConfigurationBinder创建选项对象并将其添加到容器中。
    • 亲:好的架构,其中每个组件只知道选项对象。支持DI。类型安全。
    • Con:更多代码。

对于一个Hello World应用程序的大小,选择1号作品就好了。对于真实世界的应用程序,我一定会考虑#3。

+0

选择#3 IOptions是要走的路。它看起来像适当的惯例。我只是没有意识到这一点。我遵循这个教程:http://www.davidhayden.me/blog/asp-net-5-configuration-and-ioptions。我遇到了一个非常重要的障碍,即需要将Microsoft.Extensions.Options.ConfigurationExtensions添加到project.json中才能使教程正常工作。 – robbpriestley