configuration - 在 mvc6 中全局使用 IConfiguration

标签 configuration asp.net-core

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

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

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

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

最佳答案

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

将您的配置放入的 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();
    }
}

然后在您的 Controller 中通过依赖注入(inject)获取您在 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 .

关于configuration - 在 mvc6 中全局使用 IConfiguration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27179370/

相关文章:

java - @SpringApplicationConfiguration 和@ContextConfiguration 的区别

linux - 用户 Centos 8 Postgresql12 的身份验证失败

c++ - 我如何获得代码::blocks to keep the libraries configured after code::blocks restarts?

asp.net-core - 如何通过依赖注入(inject)将 IOptions 传递给另一个项目

asp.net - 是否等效于ASP.NET Core MVC中的 “@section”?

ruby-on-rails-3 - 部署到 heroku Assets 管道 Sprockets::fileNotFound

performance - CPU 利用率和线程

php - 在 Azure 上运行 ASP.Net Core 和 PHP

razor - URL.Page 对 ASP.Core Identity 返回 null

c# - 每个表中的列名必须是唯一的。多次指定表 'LastName' 中的列名 'HumanCustomers'