【发布时间】:2017-07-08 15:13:50
【问题描述】:
直截了当的问题是:Microsoft.Extensions.Options.IOptions 是否意味着只能在伞形应用(本例中为 Web 应用)的上下文中使用,还是也可以在类库中使用?
示例:
在一个 n 层的 asp.net 核心应用程序中,我们的服务层依赖于来自 appsettings.json 文件的一些设置。
我们首先从 Startup.cs 中的这些内容开始:
services.Configure<Services.Options.XOptions>(options =>
{
options.OptionProperty1 = Configuration["OptionXSection:OptionXProperty"];
});
然后在服务构造函数中:
ServiceConstructor(IOptions<XOptions> xOptions){}
但这假设在我们的服务层中我们依赖于Microsoft.Extensions.Options。
我们不确定这是推荐的方式还是有更好的做法?
我们的服务类库应该知道 DI 容器实现,这感觉有点尴尬。
【问题讨论】:
-
在我认为有用的地方使用 IOptions 是完全合法的
-
如果您明天想在其他使用 .net 核心默认容器以外的 DI 容器的伞式应用程序中使用您的服务,会发生什么情况?
-
服务类不需要知道DI,它只是有一个consturcotr依赖,服务本身也应该由未更新的DI添加。 DI 贯穿所有层
-
除 Startup.cs 外,您的所有类都不应知道 DI 容器,在该容器中,您可以轻松切换到其他 DI 容器,而不是默认容器。拥有构造函数依赖并不意味着意识到 DI
-
@deezg in 99.9% 我不需要重新加载
appsettings.json,所以我不使用IOptions<T>。您可以在这里找到关于这种方法的优缺点的类似问题:stackoverflow.com/questions/43679665/…
标签: configuration asp.net-core .net-core