【问题标题】:Using IConfiguration globally in mvc6在 mvc6 中全局使用 IConfiguration
【发布时间】:2014-11-27 22:15:38
【问题描述】:

我可能已经盯着这个很久了,但是最近几天我已经跳入了用于 asp.net 的 MVC6,虽然我真的很喜欢这个,但我似乎找不到一种方便的方式来访问在 Start.cs 中定义后的配置与

Configuration = new Configuration()
    .AddJsonFile("config.json")
    ...

那么,我需要将它添加到 DI 中还是已经存在?还是应该在需要时创建一个新实例,因为可以创建不同的配置(例如 IIdentityMessageService)创建一个 sendgrid.json 并将其加载到服务本身中?

可能有一个非常简单的解决方案,但就像我说的那样,我已经研究了好几天了。

【问题讨论】:

    标签: configuration asp.net-core


    【解决方案1】:

    仅在您的 Startup.cs 中加载配置。如果您稍后在其他地方需要它们,您可以将这些值加载到适当的 POCO 中并将它们注册到 DI 中,以便您可以将它们注入您需要的地方。这允许您以对您的应用程序有意义的方式在不同的文件和不同的 POCO 中组织您的配置。在依赖注入中已经内置了对此的支持。以下是你的做法:

    将您的配置放入的 POCO:

    public class SomeOptions
    {
        public string EndpointUrl { get; set; }
    }
    

    您的 Startup.cs 将配置加载到 POCO 并在 DI 中注册。

    public class Startup
    {
        public Startup()
        {
            Configuration = new Configuration()
                        .AddJsonFile("Config.json")
                        .AddEnvironmentVariables();
        }
    
        public IConfiguration Configuration { get; set; }
    
        public void Configure(IApplicationBuilder app)
        {
            app.UseMvc();
        }
    
        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<SomeOptions>(options => 
                options.EndpointUrl = Configuration.Get("EndpointUrl"));
    
            services.AddMvc();
        }
    }
    

    然后在您的控制器中通过依赖注入获取您在 Startup.cs 中创建的配置 POCO,如下所示:

    public class SomeController
    {
        private string _endpointUrl;
        public SomeController(IOptions<SomeOptions> options)
        {
            _endpointUrl = options.Options.EndpointUrl;
        }
    }
    

    使用 1.0.0-beta1 版本的 aspnet5 进行测试。

    欲了解更多信息,请参阅The fundamentals of ASP.Net 5 Configuration

    【讨论】:

    • 这是我一直在寻找的,我似乎错过了服务集合中的配置选项。
    • 嘿 AndersNS,我已经尝试过了,但 IOptions&lt;SomeOptions&gt; options 出现错误是否需要注入?
    • 我的示例使用构造函数注入将 IOptions 放入 SomeController 是的。
    • 还有一个重载的 Configure 会自动绑定到具有正确名称的属性,因此您可以使用 services.Configure(Configuration)
    • 找到了!甚至官方文档 (docs.asp.net/en/latest/fundamentals/configuration.html) 也没有分享秘密:使用 Microsoft.Framework.OptionsModel;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 2022-10-15
    • 2015-02-06
    • 2021-02-08
    • 1970-01-01
    • 2014-11-23
    相关资源
    最近更新 更多