将IConfigurationRoot注入业务逻辑或数据访问层的类是不好的风格?

时间:2018-03-26 09:59:08

标签: asp.net-core .net-core

我们有一个ASP.NET Core 1.1应用程序,它分为3层:

  • 网络
  • 商业逻辑(BLL)
  • 数据访问(DAL)

我们有一些BLL的方法和一些需要配置中的值的DAL。我看到两种可能性来传递它们所需的值:

  • 将值定义为方法的参数,将它们放入Web层并将它们传递给BLL和DAL
  • 将IConfigurationRoot注入BLL和DAL

这两种可能性中哪一种更值得推荐?

1 个答案:

答案 0 :(得分:6)

使用ASP.NET Core,您实际上应该选择第三种可能性:

  • 使用注入了IOptions<T>包装器的强类型设置。

以下是一个示例:

设置的POCO:

public class SomeSettings
{
    public string SomeStringValue { get; set; }

    public int SomeNumericValue { get; set; }

    // ... 
}

注入设置:

public class SomeClass
{
    private readonly SomeSettings settings;

    public SomeClass(IOptions<SomeSettings> options)
    {
        this.settings = options.Value;
    }
}

注册设置:

public void ConfigureServices(IServiceCollection services)
{
    //  ...

    services.Configure<SomeSettings>(Configuration.GetSection("SectionNameHere"));
}

使用选项模式recommended way来处理.NET Core中的配置。