【发布时间】:2019-09-03 07:31:31
【问题描述】:
我有一个 MySettings 类,我想将其配置为 Options 以通过依赖注入使其可用。
目前我这样做(在服务构建器扩展方法中):
services.Configure<MySettings>(configuration.GetSection(MySettings.CustomSectionName));
我的问题是一部分设置来自 appsettings,而其他值仅在运行时(启动)时才知道。
所以我尝试找出如何通过添加运行时提供的值来配置设置。我试图将值添加到配置中
configuration["SectionName:ValueX"] = "my runtime value";
不起作用和valuex始终为null(当在控制器中注入选项时)。
对我有什么建议吗?
【问题讨论】:
-
您不一定需要使用
Options。如果我做对了,您可以将该部分绑定到您的类,获取它的一个实例,添加更多配置,然后在 DI 容器中自己将其注册为单例。您能否更好地解释这些其他“运行时”值是如何获得的? -
好吧,该值只是一个硬编码的名称(在多个地方使用),不应在代码之外更改(也就是通过配置)。取什么值取决于库的用户(在 Startup.ConfigureServices 中)。我更喜欢程序集名称、guid 或硬编码字符串。
-
啊,我明白了。所以你有你的配置,但是消费者可以添加更多的东西,你想以某种方式将它们合并在一起?
-
嗯,是的。现在我有服务构建器扩展方法(用于添加服务),它将 ValueX 作为字符串,验证它,如果它无效则抛出异常。我只是没有将这个值放入配置中(在扩展方法中),所以它是在控制器注入选项时设置的。
标签: asp.net-core .net-core asp.net-core-mvc