【发布时间】:2018-09-07 04:49:19
【问题描述】:
我试图了解使用 IOptions<T> 和 Action<T> 之间的区别以及何时使用什么。
我有一个使用 IServiceCollection 扩展方法的库,我需要在其中配置我的服务以及配置 EF DbContext。
示例:
namespace Microsoft.Extensions.DependencyInjection
{
public static void AddModule(this IServiceCollection services, IOptions<SomeOptionsClass> options) {
services.AddDbContext<MyContext>(contextOptions => contextOptions.UseSqlServer(SomeOptionsClass.ConnectionString));
}
}
如何从SomeOptionsClass 中获取ConnectionString 属性值?
【问题讨论】:
-
不确定为什么这里需要 IOptions。提供更多上下文。应该能够从配置中获取连接字符串。 IOptions 用于将设置注入到类中
-
我想要做的是允许某人管理他们自己的配置 (appsettings.json) 文件,但是在配置我的库时,我希望他们传递我的库所需的设置配置属性。跨度>
-
我可以使用 Action
但是从动作中获取价值的正确方法是什么?调用该操作是正确的方法吗? actionOptions?.Invoke(变量); ? -
我完全不明白你到底在问什么(也许只是我自己)。如果您尝试重新加载配置数据,可以使用IOptionsSnapshot。但我不知道
Action<T>与这些有什么关系(或者即使您一直在指代Action<T>,或者您是否也在此处指代操作方法)。 -
嗨@NightOwl888,我正在尝试了解如何最好地为我的扩展方法获取配置选项。我看过一些项目,例如 swagger 在 AddSwaggerGen 中使用 Action
。我试图了解您为什么/何时使用 Action 而不是 IOptions 。
标签: c# asp.net-core dependency-injection extension-methods asp.net-core-2.0