日韩性视频-久久久蜜桃-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ò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜久久剧场 | 国产麻豆剧果冻传媒白晶晶 | 成人a v视频 | 淫综合网 | 精品熟女一区 | 一区二区国产欧美 | 亚洲成熟毛多妇女av毛片 | 多男调教一女折磨高潮高h 国内毛片毛片毛片毛片毛片 | 牛牛精品视频 | 久久成人人人人精品欧 | 男女操操视频 | 久久亚洲综合 | 日本大片黄| 欧美日韩一卡二卡三卡 | av影片在线观看 | 精品久久在线 | 人人干人人艹 | 久草美女| 精品99视频 | 亚洲欧美精品午睡沙发 | 国产第一页屁屁影院 | 91你懂的 | 亚洲free性xxxx护士白浆 | 中文字幕乱妇无码av在线 | 国产精品一区二区三区四区 | 日韩国产成人无码av毛片 | 免费无遮挡在线观看视频网站 | 亚洲精品www久久久 一级aaa毛片 | 一本大道久久精品 | 边打电话边做 | 亚洲色成人www永久网站 | 黄色综合网站 | 播播网色播播 | 国产精品一区二区人妻喷水 | 亚洲社区在线观看 | www.中文字幕av | 一卡二卡三卡视频 | 亚洲在线观看av | 久久久久久久久免费 | 久久五| 黄色大毛片 | 亚洲第一免费播放区 | av撸撸在线| 美日韩免费 | 日韩精品h| 免费在线观看不卡av | 欧美性在线观看 | 国产精品高潮AV无码 | 天天爽天天做 | 长篇乱肉合集乱500小说日本 | 琪琪免费视频 | 亚洲av无码乱码在线观看富二代 | 嫩模一区| 蜜桃臀av在线 | 女人扒开屁股让男人捅 | 成人你懂的 | 少妇被粗大猛进进出出s小说 | 亚洲v天堂| 伊人蕉 | 中文字幕高清在线免费播放 | 欧美伦理片网站 | 免费看一区二区三区 | wwwav在线播放| 伊人久操| 91视频这里只有精品 | 少妇精品高潮欲妇又嫩中文字幕 | 豆花视频在线播放 | 国产成人av免费 | 69视频在线播放 | 亚洲成人a v| 在线国产91 | av2014天堂 | 窝窝午夜视频 | 亚洲一区二区三区四区 | 久久夜夜夜 | 人人妻人人澡人人爽精品欧美一区 | 国产视频一区二区三区四区五区 | 亚洲一级在线 | 蜜桃va| va在线 | 六月丁香婷婷激情 | 久久福利在线 | 亚洲尤物视频 | 日本泡妞视频 | 久久99精品久久久久久三级 | 久久99日 | 99热3 | 国产一线二线三线在线观看 | 大尺度床戏揉捏胸视频 | 日韩专区在线 | 97超碰在线资源 | 精品亚洲精品 | 中国一级黄色 | 久久成人国产 | 好看的av在线 | 成人在线你懂的 | wwwwyoujizzcom| 老女人毛片 | 黄色网页入口 |