【问题标题】:Passing and maintaining configuration in a Class Library在类库中传递和维护配置
【发布时间】:2020-07-08 23:46:31
【问题描述】:

我正在与我的 Web API 分开的类库中构建一个存储库,以保持关注点分离。

我想将数据库配置存储在我的 appsettings.json 中,以便我可以在 Azure Web 应用程序中覆盖这些设置。这为我提供了对本地、预生产和生产环境进行单独设置的途径。

我假设向存储库提供配置设置的最佳方式是从 Startup.cs 读取它们,然后将它们传递给类库。

存储这些设置以确保它们在应用程序的整个生命周期中持续存在并确保它们不会被垃圾收集的最佳方式是什么?

【问题讨论】:

    标签: c# asp.net-core asp.net-core-webapi


    【解决方案1】:

    你需要创建一个配置类:

     public class MyLibraryConfiguration {
    
         public string PropertyOne {get;set;}
     }
    

    并在您的类中使用它作为构建时依赖项:

     public class MyService {
    
          private readonly IOptions<MyLibraryConfiguration> config;
          public MyService(IOptions<MyLibraryConfiguration> config) {
              this.config = config;
          }
     }
    

    您必须在 Web 项目的 Startup.cs 中注册您的依赖项和配置:

      services.Configure<MyLibraryConfiguration>(options => this.Configuration.GetSection("SectionName").Bind(options));
      services.AddScoped<MyService>();   
    

    然后你可以在构建时使用 MyService 注入它

    【讨论】:

    • 单独的类库如何从 API 配置设置中读取设置?
    • 类库没有设置。包含主项目(Web 项目、Api 项目、控制台项目)的项目读取设置并将它们传递给库的类。我建议的方法(称为选项模式)负责将配置文件读取到主项目,而类库使用传递的配置。
    • 正确。问题的主要焦点是,一旦我将设置存储在 API 端,就需要将它们传递给类库并保留在那里。一个简单的静态类是否会永久保留字符串,可能持续数周?
    • 使用此解决方案,IOC 容器(ServiceCollection + ServiceProvider)负责为您保存引用。您不必担心 GC
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    相关资源
    最近更新 更多