配置系统 - AppSettingsJsonConfigRepository

优质
小牛编辑
126浏览
2023-12-01

[命名空间: Serenity.Configuration, 程序集: Serenity.Data]

大多数 Web 应用程序在 web.config 中的 appSettings 节点存储配置设置。

Serenity 提供一个 IConfigurationRepository 接口的默认实现,可以使用 appSettings 作为配置存储。

  1. public class AppSettingsJsonConfigRepository : IConfigurationRepository
  2. {
  3. public void Save(Type settingType, object value)
  4. {
  5. throw new NotImplementedException();
  6. }
  7. public object Load(Type settingType)
  8. {
  9. return LocalCache.Get("ApplicationSetting:" + settingType.FullName,
  10. TimeSpan.Zero, delegate()
  11. {
  12. var keyAttr = settingType.GetCustomAttribute<SettingKeyAttribute>();
  13. var key = keyAttr == null ? settingType.Name : keyAttr.Value;
  14. return JSON.Parse(ConfigurationManager.AppSettings[key].TrimToNull() ??
  15. "{}", settingType);
  16. });
  17. }
  18. }

需要手动注册该提供者:

  1. var registrar = Dependency.Resolve<IDependencyRegistrar>();
  2. RegisterInstance<IConfigurationRepository>("Application",
  3. new AppSettingsJsonConfigRepository())

当调用 Serenity.Web.CommonInitialization.Run() 时,如果你没有注册另一个实现,它将注册该类作为 IConfigurationRepository 的默认提供者(在 Application 作用域)。

该提供者希望在 web.config / app.config 文件以 JSON 格式定义设置:

  1. <appSettings>
  2. <add key="Logging" value="{ File: '~\\App_Data\\Log\\App_{0}_{1}.log',
  3. FlushTimeout: 0, Level: 'Debug' }" />
  4. </appSettings>

Serenity 默认只包含此配置提供者。你可以它为例,编写另一个适合你的设置(从数据库加载)。

在实现中对返回对象进行缓存是一个好主意,以避免每次读取设置的反序列化成本。