我可能已经盯着这个很久了,但是最近几天我已经跳入了用于 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/