日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【转】ABP源码分析七:Setting 以及 Mail

發(fā)布時(shí)間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】ABP源码分析七:Setting 以及 Mail 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文主要說(shuō)明Setting的實(shí)現(xiàn)以及Mail這個(gè)功能模塊如何使用Setting.

?

首先區(qū)分一下ABP中的Setting和Configuration。

Setting一般用于需要通過外部配置文件(或數(shù)據(jù)庫(kù))設(shè)置的簡(jiǎn)單類型數(shù)據(jù)(一般就是字符串),比如SMTP HOST.

Configuration一般只需要通過內(nèi)部代碼完成的配置,一般用于設(shè)置復(fù)雜類型的數(shù)據(jù)。

?

目前Abp在setting 這個(gè)功能模塊只能從配置文件讀取設(shè)置,無(wú)法從其他source(比如數(shù)據(jù)庫(kù))讀取設(shè)置。也可以自定義SettingStore然后注入到ABP中來(lái)實(shí)現(xiàn)從其他Source讀取設(shè)置(非本文重點(diǎn))。

?

Setting如何實(shí)現(xiàn)的:

首先我們要定義一個(gè)Setting,也就是說(shuō)我們需要設(shè)置什么? 這個(gè)就是SettingDefinition。,?

SettingDefinition/SettingDefinitionGroup,?用于定義Setting。不同的Name標(biāo)識(shí)不同的Setting。假如要配置SMTP HOST,那么就可以定義一個(gè)name="Abp.Net.Mail.Smtp.Host" 的SettingDefinition。注意:?Name和DefaultValue必須要的屬性,其他都是輔助屬性。SettingDefinitionGroup用于給SettingDefinition分組,Abp底層框架似乎沒有真正使用過這個(gè)類。

下面這個(gè)圖說(shuō)明SettingDefinition/SettingDefinitionGroup定義了哪些屬性及他們的關(guān)系。

?

?

SettingScopes:這是一個(gè)標(biāo)注了Flags特性的枚舉類型,表示setting的應(yīng)用范圍。

?

SettingDefinitionProviderContext:上下文類,一般用于封裝方法間調(diào)用需要傳遞的參數(shù)。目前來(lái)說(shuō)只是個(gè)空類,沒有實(shí)際作用。

?

SettingProvider: 為具體的功能模塊所需的設(shè)置定義SettingDefinition,并且以數(shù)組的形式返回。使用SettingProvider定義SettingDefinition的是準(zhǔn)確方式。 那么Setting定義好以后,如何為其設(shè)置實(shí)際需要的value呢?目前可以在從web.config中設(shè)置。目前有EmailSettingProvider用于提供SMTP的設(shè)置,NotificationSettingProvider,LocalizationSettingProvider,還有ClearCacheSettingProvider。

?

SettingsConfiguration?/ISettingsConfiguration:用于集中化設(shè)置和管理SettingProvider的對(duì)象。其封裝了一個(gè)ITypeList<SettingProvider> Providers的集合類。實(shí)際項(xiàng)目中可以通過Configuration.Setting來(lái)獲取ISettingsConfiguration實(shí)例,然后將自定義的SettingProvider添加到SettingsConfiguration 對(duì)象中(需要在模塊的PreInitialize方法完成這個(gè)動(dòng)作)。

?

?

ISettingDefinitionManager/SettingDefinitionManager: 主要完成注冊(cè)到ABP中的SettingDefinition初始化。 首先通過ISettingsConfiguration實(shí)例獲取setting providers集合,然后在Initialize方法中通過setting providers獲取SettingDefinition的數(shù)組。并將其保存在Dictionary中,其key就是SettingDefinition的name.

?

ISettingDefinitionManager的Initialize方法是在AbpKernelModule的PostInitialize方法執(zhí)行的時(shí)候被調(diào)用。

?

上面接口/類直接的關(guān)系圖

?


上面解釋了ABP是如何定義/管理一個(gè)Setting. 下面解釋下ABP是如何使用Setting的。

?

ISettingValue/SettingValueObject:代表setting的鍵值對(duì)。Setting的具體值當(dāng)然在外部Config中,然而在代碼中是通過ISettingValue來(lái)封裝的。

?

SettingManager:通過ISettingStore獲取或更改Setting的值,SettingManager并不是每次調(diào)用ISettingStore去讀取設(shè)置,而是在第一讀取的時(shí)候就將結(jié)果緩存起來(lái)。如下代碼所示

定義緩存對(duì)象

?

讀入緩存

?

SettingInfo:封裝了應(yīng)用于user/tenant的setting值


ISettingStore:這個(gè)接口定義了相關(guān)方法用于從數(shù)據(jù)源讀取和更改setting值。 這些方法以SettingInfo類型作為方法的輸入和輸出參數(shù)。

DefaultConfigSettingStore:ABP中唯一實(shí)現(xiàn)了ISettingStore的類,只用于從配置文件讀取setting,修改是不支持的。ABP.Zero中有另外一個(gè)支持CRUD的實(shí)現(xiàn)。

下圖是上面接口及類的關(guān)系圖

?

?

?


下面以Mail功能的實(shí)現(xiàn)來(lái)說(shuō)明如何使用Setting

?

EmailSettingNames/Smtp:?封裝SMTP設(shè)置的信息。也就是說(shuō)定義了一些常量用作setting的name. 比如Host就是“Abp.Net.Mail.Smtp.Host”,所以在web.config就要配置一項(xiàng)key是“Abp.Net.Mail.Smtp.Host”的配置項(xiàng)。

?

EmailSettingProvider:繼承自SettingProvider, 將SMTP的各項(xiàng)設(shè)置封裝成SettingDefinition,并以數(shù)組形式返回。

?

ISmtpEmailSenderConfiguration/IEmailSenderConfiguration:定義了獲取EmailSettingNames中定義的設(shè)置的接口。

?

EmailSenderConfiguration/SmtpEmailSenderConfiguration:?實(shí)現(xiàn)上面兩個(gè)接口,通過IsettingManager的實(shí)例讀取設(shè)置

?

IEmailSender/ISmtpEmailSender/EmailSenderBase/SmtpEmailSender:?用于發(fā)送郵件。

?

最后,照舊圖示他們之間的關(guān)系。

?

返回ABP源碼分析系列文章目錄

Q:一個(gè)設(shè)置配置,怎么搞的這么復(fù)雜。。
A:我想這應(yīng)該是設(shè)計(jì)中嚴(yán)格遵循單一職責(zé)原則的必然結(jié)果:大量細(xì)小的類和看似復(fù)雜的關(guān)系。

Q:請(qǐng)問樓主最后的代碼圖是怎么生成的呢,插件還是vs自帶的
A:VS 自帶的,企業(yè)版和旗艦版有

SettingDefinitionProviderContext 提供上下文,可以通過上下文修改框架設(shè)定或自定義模塊的設(shè)定

例如:
public override IEnumerable<SettingDefinition> GetSettingDefinitions(SettingDefinitionProviderContext context)
{
context.Manager.GetSettingDefinition(LocalizationSettingNames.DefaultLanguage).DefaultValue = “zh-cn”;
}

總結(jié)

以上是生活随笔為你收集整理的【转】ABP源码分析七:Setting 以及 Mail的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久久久亚洲av无码专区桃色 | 国产一区综合 | 娇小激情hdxxxx学生 | 日本a在线| 国产成人短视频 | 亚洲综合视频在线观看 | 国产亚洲精品美女久久久久 | 亚洲专区欧美 | 妹子干综合网 | 伊人久久青青草 | 中文字幕日韩亚洲 | www超碰在线| 骚婷婷| 免费黄色网址在线观看 | av中文字幕免费观看 | 国产后入清纯学生妹 | 动漫美女舌吻 | 性高潮久久久久 | 制服.丝袜.亚洲.中文.综合懂 | 精品爆乳一区二区三区 | 韩国三级做爰视频 | 有码一区 | 美女色呦呦 | 久久国产中文 | 欧美精品观看 | 麻豆国产一区二区三区 | 亚洲日本精品 | 男女野外做受全过程 | jzzijzzij亚洲成熟少妇在线观看 久久久精品人妻一区二区三区 | 高清久久 | 北岛玲av在线| 狠狠艹狠狠干 | 亚洲淫 | 黄色三极片 | 极品白嫩少妇无套内谢 | 自拍偷拍第 | h在线网站 | 华人av在线 | 婷婷精品| 日韩欧美国产精品 | av午夜激情 | 天堂国产一区二区三区 | 日本一区二区在线免费 | 日本老妇高潮乱hd | 一级精品毛片 | 国产av不卡一区二区 | 亚洲一区二区高清视频 | 精品久久久久久久久久久久久久久久 | wwwxxx在线播放| 亚洲在线观看免费 | 欧美第十页 | 免费污片网站 | 最新在线黄色网址 | 欧美精品福利视频 | 无码人妻精品一区二区三 | 日日噜噜噜夜夜爽爽狠狠视频97 | 韩国av网| 日韩国产传媒 | 日韩av看片| 中文字幕免费 | 国产精品一区二区三区线羞羞网站 | 91人人爽 | www.黄色网址| 色综合天天综合网天天狠天天 | 制服.丝袜.亚洲.中文.综合 | 久久精品中文字幕 | a资源在线 | 91免费污视频 | 日韩黄色av | 午夜两性视频 | 日本一区二区视频 | 老妇女性较大毛片 | 丰满大乳奶做爰ⅹxx视频 | 黑丝一区 | 亚洲综合激情在线 | 精品性久久 | 亚洲爱视频 | 欧美特级黄色大片 | 久草一本 | 亚洲精品成人无码熟妇在线 | 久久伊人操 | 午夜国产精品视频 | 一级特黄av | 四虎永久网站 | 天天操天天干天天舔 | 成人毛片在线观看 | 久久影视| 国产一区二区视频在线播放 | 欧美视频一区二区 | 色婷婷综合成人 | 色吟av | 操比视频网站 | 色男人天堂av | 日韩中文字幕视频 | 九九午夜视频 | 亚洲人妻一区二区 | 岛国精品在线观看 | 久久99久久99精品 | 偷拍一区二区三区 |