ABP框架学习记录(5)- Setting解析
ABP框架学习记录(5)- Setting解析
ABP中的 Setting 和 Configuration:
Setting一般用于需要通过外部配置文件(或数据库)设置的简单类型数据(一般就是字符串)。
Configuration一般只需要通过内部代码完成的配置,一般用于设置复杂类型的数据。
Setting的实现
SettingDefinition:用于定义Setting。
SettingDefinitionGroup:用于给SettingDefinition分组。
SettingsConfiguration / ISettingsConfiguration:用于集中化设置和管理 SettingProvider 的对象。其封装了一个ITypeList<SettingProvider> Providers的集合类。可以通过Configuration.Setting来获取ISettingsConfiguration实例,然后将自定义的 SettingProvider 添加到 SettingsConfiguration 对象中,下图:

SettingDefinitionManager:主要完成注册到ABP中的 SettingDefinition 初始化,通过 ISettingsConfiguration 实例获取 setting providers 集合,然后在 Initialize 方法中通过 setting providers 获取 SettingDefinition 的数组。并将其保存在 Dictionary 中,其key就是 SettingDefinition 的Name,下图:

SettingDefinitionManager 继承 ISingletonDependency接口,将在BasicConventionalRegistrar类中实现约定规则的注入:

AbpKernelModule 中 PostInitialize 调用 SettingDefinitionManager的 Initialize方法:

SettingDefinitionProviderContext:用于对 ISettingDefinitionManager 的封装:

SettingScopes:标注了Flags特性的枚举类型,表示setting的应用范围:

SettingProvider:为具体的功能模块所需的设置定义 SettingDefinition,并且以数组的形式返回:

SettingManager / ISettingManager :用户获取配置详情。

公共方法:

以mail的实现来使用Setting
目录结构:

IEmailSenderConfiguration/EmailSenderConfiguration 和 ISmtpEmailSenderConfiguration/SmtpEmailSenderConfiguration:定义配置。
EmailSenderConfiguration:

SmtpEmailSenderConfiguration:

EmailSettingProvider:继承自 SettingProvider, 将SMTP的各项设置封装成SettingDefinition,并以数组形式返回。

EmailSenderBase/IEmailSender 和 ISmtpEmailSender/SmtpEmailSender:用户发送邮件。
参考: