国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

AbpKernelModule

2019-11-14 14:26:32
字體:
來源:轉載
供稿:網友

PReInitialize

IocManager.AddConventionalRegistrar(new BasicConventionalRegistrar());

增加BasicConventionRegister, 在這里只是添加這種 基本的注冊方式,翻譯的不好有點擾,其主要是告訴Ioc在后面的注冊的時候關注三種類型

ITransientDependency

ISingletonDependency

IInterceptor

意味著只要你定義的類加了上面任意一個接口,就會被Abp的框架自動注冊到Ioc,

但是這里只是告訴Ioc有這種注冊方式,真正的注冊并不是在這里。

 

ValidationInterceptorRegistrar.Initialize(IocManager);

internal static class ValidationInterceptorRegistrar{    public static void Initialize(IIocManager iocManager)    {        iocManager.IocContainer.Kernel.ComponentRegistered += Kernel_ComponentRegistered;    }    private static void Kernel_ComponentRegistered(string key, IHandler handler)    {        if (typeof(IapplicationService).IsAssignableFrom(handler.ComponentModel.Implementation))        {            handler.ComponentModel.Interceptors.Add(new InterceptorReference(typeof(ValidationInterceptor)));        }    }}

這段代碼很有意思, 其意思是說當Ioc中有組件被注冊的時候(也就是往Ioc添加某個類型的時候), 檢測該對象是否是IApplicationService(也就是只驗證ApplicationService層), 是的話做Validation的攔截,可以做到攔截之后對ApplicationService層的方法參數做檢測, Interceptors是一個攔截器集合, 可以加入更多的攔截器,比如方法調用日志監控橫切面的操作。

所以當一個請求進入ApplicationService層之后,第一個做的事情就是 Validation.

跳過Validation的條件 :

DisableValidationAttribute, 僅可添加在方法上面

非Public方法

參數為空

驗證失敗會拋出: AbpValidationException異常,并帶有驗證失敗的詳細字段及錯誤信息

最后如果參數里面的某個屬性定義添加了IShouldNormalize接口,還會調用IShouldNormalize的Normalize方法,做一些數據規范化的操作,目前還沒想出來有啥用。

 

FeatureInterceptorRegistrar.Initialize(IocManager);

其針對所有的Ioc里面的對象,這個攔截器攔截的要素有2點:

a. 類上有RequiresFeatureAttribute

b. 類里面的某個某個方法有RequiresFeatureAttribute

這個看起來像一個比較通用的功能性的檢查,應該是為一個小的擴展功能存在的, 目前沒用到,暫時忽略.

 

AuditingInterceptorRegistrar.Initialize(IocManager);

審計攔截器,很有用的數據攔截, 其主要作用就是記錄攔截到的方法調用的數據。

攔截規則:

private static bool ShouldIntercept(Type type){    if (_auditingConfiguration.Selectors.Any(selector => selector.Predicate(type)))    {        return true;    }    if (type.IsDefined(typeof(AuditedAttribute), true)) //TODO: true or false?    {        return true;    }    if (type.GetMethods().Any(m => m.IsDefined(typeof(AuditedAttribute), true))) //TODO: true or false?    {        return true;    }    return false;}

可以看到除了第一條做了一個擴展規則之外,其余兩條都是通過AuditedAttribute來處理的.

關于Selectors的選擇器, 我們緊接著可以看到下面的代碼:

image

也只是針對IApplicationService層的方法做了審計攔截.

至此應該明白 Abp的審計是如何做的了吧.

 

但是看似這個功能很好,難免也會有特殊癖好的人思考如何關掉這么有用的功能, 看AuditingInterceptorRegistrar的類里面Initialize方法

public static void Initialize(IIocManager iocManager){    _auditingConfiguration = iocManager.Resolve<IAuditingConfiguration>();    if (!_auditingConfiguration.IsEnabled)    {        return;    }    iocManager.IocContainer.Kernel.ComponentRegistered += Kernel_ComponentRegistered;}

寫明了_auditingConfiguration.IsEnable來判斷是否啟用,但是這個方法本身就是在AbpKernel中執行的,請問在何處可以設置這個值呢?

通過上篇的應用程序生命周期的分析,

protected virtual void Application_Start(object sender, EventArgs e){    AbpBootstrapper.IocManager.RegisterIfNot<IAssemblyFinder, WebAssemblyFinder>();    AbpBootstrapper.Initialize();}

但是IAuditingConfiguration的注冊及本方法的Init都是在Initizlize這個方法中,如果你使用的是非Abp的源代碼,貌似沒有辦法做到關閉, 所以上面關閉Abp 默認Auditing功能的答案是否定的,待后續找作者處理(這個已聯系作者處理: https://github.com/aspnetboilerplate/aspnetboilerplate/issues/721)。

審計日志的保存:

image

 

UnitOfWorkRegistrar.Initialize(IocManager);

Uow的攔截注冊

image

image

可以看到默認情況下攔截兩種:

1. 所有有IRepository接口跟IApplicationService的類

2. 所有的加了UnitOfWorkAttribute的方法

 

AuthorizationInterceptorRegistrar.Initialize(IocManager);

這個可以實現Service層方法的授權檢查, 沒怎么用,忽略.

 

其他
Configuration.Settings.Providers.Add<EmailSettingProvider>();Configuration.UnitOfWork.RegisterFilter(AbpDataFilters.SoftDelete, true);Configuration.UnitOfWork.RegisterFilter(AbpDataFilters.MustHaveTenant, true);Configuration.UnitOfWork.RegisterFilter(AbpDataFilters.MayHaveTenant, true);ConfigureCaches();

EmailSetting 郵件設置

SoftDelete: 軟刪除設置

MustHaveTenant: 多租戶設置

MayHaveTenant:

Caches: 緩存策略設置


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 砚山县| 博客| 娱乐| 苏尼特右旗| 蓝山县| 大冶市| 吐鲁番市| 紫金县| 柳州市| 天祝| 宜兰市| 新田县| 高雄县| 沙河市| 彭阳县| 农安县| 兴义市| 天祝| 石棉县| 维西| 明光市| 上犹县| 卓尼县| 襄汾县| 上饶市| 绵竹市| 青州市| 四会市| 大名县| 湖南省| 扶绥县| 读书| 淮南市| 金昌市| 乐清市| 阿拉善左旗| 达州市| 东至县| 温泉县| 尚义县| 莱阳市|