ASP.NET核心 - DI - 使用Action <t>或IOption <t>

时间:2018-03-28 13:12:54

标签: c# asp.net-core dependency-injection extension-methods asp.net-core-2.0

我正在尝试了解使用PartyB - 15 PartyC - 12 PartyA - 9 PartyE - 5 PartyD - 3 IOptions<T>以及何时使用内容之间的差异。

我有一个库使用Action<T>的扩展方法,我需要配置我的服务以及配置EF IServiceCollection

示例:

DbContext

如何从namespace Microsoft.Extensions.DependencyInjection { public static void AddModule(this IServiceCollection services, IOptions<SomeOptionsClass> options) { services.AddDbContext<MyContext>(contextOptions => contextOptions.UseSqlServer(SomeOptionsClass.ConnectionString)); } } 获取ConnectionString属性值?

1 个答案:

答案 0 :(得分:3)

不确定为何需要IOptions<T>

应该能够在启动期间从配置( appsetting )获取连接字符串。 IOptions<T>通常用于将设置注入类

我建议简化API以期望连接字符串

namespace Microsoft.Extensions.DependencyInjection  {
    public static void AddModule(this IServiceCollection services, string connectionString) {
        services.AddDbContext<MyContext>(contextOptions => contextOptions.UseSqlServer(connectionString));
    }
}

这将使用户在配置模块时具有更大的灵活性。

例如,在组合根目录中的配置服务中,您可以访问配置并提取要根据需要使用的连接字符串

//...

services.AddModule(Configuration["Appsettings Key Here"]);