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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】ABP源码分析二十一:Feature

發(fā)布時間:2023/12/10 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】ABP源码分析二十一:Feature 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Feature是什么?Feature就是對function分類的方法,其與function的關(guān)系就比如Role和User的關(guān)系一樣。

ABP中Feature具有以下屬性: 其中最重要的屬性是name,用以表示feature的Identity,一個feature擁有一個name. 一個Feature可以有一組子Features,從而構(gòu)成Feature樹。

?

?

FeatureDictionary: 其本身繼承自Dictionary。其作用就是把一個Feature及其Child Features從樹狀結(jié)構(gòu)加載加到Dictionary結(jié)構(gòu)中(扁平化)。

?

IFeatureDefinitionContext/FeatureDefinitionContextBase?: 這組接口和抽象類提供管理FeatureDictionary的方法, 例如:新建一個feature到FeatureDictionary中,和根據(jù) name從 FeatureDictionary返回一個feature. 他們是Feature Manager的基類

?

IFeatureManager:該接口定義根據(jù)name返回Feature的一些方法

?

FeatureManager:通過調(diào)用繼承自FeatureDefinitionContextBase中的方法來實現(xiàn)IFeatureManager中定義的方法。這個FeatureManager起到了一個類似適配器的作用,把IFeatureDefinitionContext適配成IFeatureManager。FeatureManager的另一個作用是初始化FeatureDictionary(其Features屬性)。

?

FeatureProvider: 抽象基類,用于向IFeatureDefinitionContext對象(FeatureManager)中添加Feature. Abp框架只提供了抽象類,下面代碼是一個簡單的示例。實際項目中可以創(chuàng)建自定義FeatureProvider來從數(shù)據(jù)庫中讀取feature來填充到FeatureManager對象中。

?

IFeatureConfiguration/FeatureConfiguration: FeatureManager通過具體的FeatureProvider來初始化FeatureDictionary(其Features屬性)。但是ABP核心模塊處于項目的最底層,怎么能知道上層定義的FeatureProvider的類型呢? FeatureConfiguration 為解決這個問題引入了FeatureProvider配置項。FeatureProvider就是一個Type 列表 (ITypeList<FeatureProvider>),注意是FeatureProvider的Type,不是實例。在需要FeatureProvider的地方,可以使用容器根據(jù)Type構(gòu)造出實例。

?

?

IFeatureChecker/FeatureChecker: 提供檢查特定的feture對于特定的tenant是否可用。首先FeatureChecker 根據(jù)Feature Name通過FeatureManager獲取Featue,然后通過從IFeatureValueStore對象根據(jù)Feature Name和tenantId獲取Feature的value值。 然后判斷value是否為“true”.

?

?

IFeatureValueStore: 接口定義了獲取Feature值的方法。FeatureValueStore需要在子模塊中實現(xiàn)。因為feature往往是存放在數(shù)據(jù)庫中的。所以Abp底層框架是不會包含對數(shù)據(jù)庫有依賴的邏輯.該接口已經(jīng)完全實現(xiàn)在了 module-zero項目中。如果沒有實現(xiàn)該接口,那么默認會使用NullFeatureValueStore對所有的功能返回null(此時使用默認的功能值)。

?

FeatureInterceptorRegistrar:用于給標注了RequiresFeatureAttribute特性的對象注冊FeatureInterceptor攔截器。由AbpKernelModuel調(diào)用。

?

FeatureInterceptor:執(zhí)行攔截器的邏輯,主要是IFeatureChecker完成feature的檢查。一個標準的Castle 攔截器。

?

?

IFeatureDependency/SimpleFeatureDependency:如果某項功能要先進行feature檢查,可以加上一個IFeatureDependency屬性。IFeatureDependency對象通過調(diào)用IFeatureChecker對象完成真正的檢查。具體用例,可查看MenuItemDefinition和UserNavigationManager的用法。

IFeatureDependencyContext/FeatureDependencyContext: 這個上下文類封裝了IFeatureChecker 和 IResolver對象。被用于方法的形參。

?

?

MenuItemDefinition:

?

?

UserNavigationManager:

?

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

?

評論列表

??

#1樓?2016-04-12 10:02?struggle_new

FeatureProvider是用于設(shè)置feature功能,如果我要在一個類或者方法使用這個特性是否有如下兩種方式
1、使用RequiresFeature進行檢查這種只能對布爾功能
2、使用 FeatureChecker.GetValue在方法中進行判定這種更多的是對值功能
請問一下樓主是否可以這樣理解

支持(0)?反對(0)

??

#2樓?[樓主]?2016-04-12 20:52?ZHK的博客

@?struggle_new
FeatureChecker.IsEnabled對布爾值Feature檢查. FeatureChecker.GetValue你的理解是對的。

支持(0)?反對(0)

??

#3樓?2016-04-12 21:40?struggle_new

@?ZHK的博客
比如我有這么一個功能,某一個租戶對用戶只能添加100用戶!
我基于feature能想到的是首先定一個用戶啟用功能為feature然后在為這個功能添加一個子feature叫用戶最大數(shù)量,但是不明白怎么將用戶最大數(shù)量限定在service或者mananger的方法上!

支持(0)?反對(0)

??

#4樓?[樓主]?2016-04-13 19:46?ZHK的博客

@?struggle_new
Applicationservice封裝了featurechecker,通過它的getvalue方法不是可以獲取到租戶的這個feature的最大值么。不知道這是不是你想問的。

支持(0)?反對(0)

??

#5樓?2016-04-13 20:05?struggle_new

@?ZHK的博客
比如在applicationservice里有一個添加用戶的方法,然后這個方法限定某一個租戶或者版本(edition)添加用戶的最大數(shù)不能超過我feature定的最大值

支持(0)?反對(0)

??

#6樓?[樓主]?2016-04-13 22:39?ZHK的博客

@?struggle_new
如果想通過添加類似RequiresFeature這樣的特性來實現(xiàn)是不可能的,至少ABP原生是不支持的。所以要實現(xiàn)你的功能,只能在方法體里面通過featurechecker獲取你feature定的最大值,然后和已經(jīng)添加的用戶數(shù)量做比較。

支持(0)?反對(0)

??

#7樓?2016-04-16 08:00?struggle_new

@?ZHK的博客
嗯,我在使用的時候發(fā)現(xiàn)也是要獲取feature的value然后在自己的代碼做比較,主要是我怕我理解錯了,謝謝你的解答

支持(0)?反對(0)

??

#8樓?2016-06-06 15:50?Chobites

feature 我完全沒有看出它的用處是什么 汗。樓主可以簡單介紹一下場景嗎?

支持(0)?反對(0)

??

#9樓?[樓主]?2016-06-06 21:18?ZHK的博客

@?Chobites
http://www.cnblogs.com/farb/p/ABPFeatures.html

總結(jié)

以上是生活随笔為你收集整理的【转】ABP源码分析二十一:Feature的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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