<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      AbpKernelModule

      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: 緩存策略設置

      posted @ 2015-11-26 14:50  DukeCheng  閱讀(1288)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 丝袜老师办公室里做好紧好爽| 久久精品国产再热青青青| 日本人妻巨大乳挤奶水免费| 久久精品国产久精国产果冻传媒 | 人人妻人人狠人人爽| 亚洲中文字幕无码永久在线| 亚洲精品国产精品乱码不| 东兰县| 午夜国产福利片在线观看| 男女动态无遮挡动态图| 国内精品视频一区二区三区八戒 | 国产精品不卡一区二区视频| caoporn成人免费公开| 人妻日韩人妻中文字幕| 国产成人久久综合第一区| 国产国产久热这里只有精品| 黄色舔女人逼一区二区三区| 欧美日韩一线| 极品蜜桃臀一区二区av| 中文无码乱人伦中文视频在线| 日韩精品无遮挡在线观看| XXXXXHD亚洲日本HD| 亚洲欧美综合中文| 成人精品日韩专区在线观看| 日韩中文字幕高清有码| 国外av片免费看一区二区三区| 县级市| 亚洲精品无码久久一线| 爆乳日韩尤物无码一区| 一本色道久久综合亚洲精品不卡| 一亚洲一区二区中文字幕| 久久久综合香蕉尹人综合网 | 亚洲国产成人AⅤ片在线观看| 亚洲AV日韩AV激情亚洲| 东源县| a级国产乱理伦片在线观看al| 亚洲顶级裸体av片| 日韩人妻少妇一区二区三区 | 特级欧美AAAAAAA免费观看| 国产涩涩视频在线观看| 亚洲精品久久麻豆蜜桃|