中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

我心(xin)中(zhong)的(de)(de)核心(xin)組件(jian)(可插拔(ba)的(de)(de)AOP)~第十(shi)三回 實(shi)現AOP的(de)(de)攔(lan)截組件(jian)Unity.Interception

回到目錄

說在前

本節主要說一下Unity家族里的攔截組件,對于方法攔截有很多組件提供,基本上每個Ioc組件都有對它的實現,如autofac,它主要用在orchard項目里,而castle也有以攔截的體現,相關可以看我的Castle~實現IoC容器這篇文章,而今天主要說一個Unity里的方法攔截的實現,事實上本篇文章是對第二回 緩存攔截器的一個擴展(zhan)和補充,對于unity這東西在微軟的Nlayer項(xiang)目里(li)有所(suo)體現,它(ta)是基于DDD構(gou)架(jia)的,無論(lun)在架(jia)構(gou)選型還(huan)是技(ji)術選型上都很超前,也都結(jie)合了很大微軟高手的心血,可讀性很高,呵呵.

做在后

通過IoC建立對象實(shi)例的方(fang)法(fa)時,它們的配置(zhi)信息(xi)一般有兩種(zhong)方(fang)式存儲,第(di)一可(ke)以(yi)通過C#程序(xu)進(jin)行存儲并建立,第(di)二可(ke)以(yi)通過配置(zhi)文件先進(jin)行配置(zhi),然后(hou)在程序(xu)里直接(jie)調(diao)用即可(ke),今天這(zhe)篇文章,我(wo)們將對這(zhe)兩種(zhong)方(fang)法(fa)進(jin)行說明.

第一,通過配置文件建立實例

  <!--BEGIN: Unity-->
  <unity xmlns="//schemas.microsoft.com/practices/2010/unity">
    <sectionExtension type="Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationExtension, Microsoft.Practices.Unity.Interception.Configuration" />
    <container>
      <extension type="Interception" />
      <register type="Project.Caching.ICacheProvider,  MvcApplication2" mapTo="Project.Caching.EntLibCacheProvider,  MvcApplication2" />
    
      <!--緩存的攔截-->
      <register type="接(jie)口類型,程序集" mapTo="接口(kou)實現(xian),程序集">
        <!--<interceptor type="InterfaceInterceptor" />-->
        <interceptor type="InterfaceInterceptor" />
        <interceptionBehavior type="Project.InterceptionBehaviors.CachingBehavior, MvcApplication2" />
      </register>
      
    </container>
  </unity>
  <!--END: Unity-->
  <cachingConfiguration defaultCacheManager="ByteartRetailCacheManager">
    <cacheManagers>
      <add name="ByteartRetailCacheManager" type="Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" expirationPollFrequencyInSeconds="600" maximumElementsInCacheBeforeScavenging="1000" numberToRemoveWhenScavenging="10" backingStoreName="NullBackingStore" />
      <!--
          expirationPollFrequencyInSeconds:過期(qi)時間(jian)(seconds)
          maximumElementsInCacheBeforeScavenging:緩沖中的最大元素數量
          numberToRemoveWhenScavenging:一次移除的數量
      -->
    </cacheManagers>
    <backingStores>
      <add type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.NullBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="NullBackingStore" />
    </backingStores>
  </cachingConfiguration>

程序(xu)里直接(jie)通過IOrderRepository來觸發它(ta)自己(ji)的方(fang)法攔截

Repository.IOrderRepository iOrderRepository = ServiceLocator.Instance.GetService<IOrderRepository>();

第二,通過程序直接建立實例

如果(guo)希(xi)望在程序里控(kong)(kong)制它(ta),代(dai)碼(ma)就多(duo)了一些(xie),控(kong)(kong)制上比較(jiao)靈活,配置文件是全局性的,而代(dai)碼(ma)里,可以有需要的時候(hou)進(jin)行(xing)創建

config配置中不需要對unity初始化,直接(jie)對caching節點進行聲明即(ji)可

  <cachingConfiguration defaultCacheManager="ByteartRetailCacheManager">
    <cacheManagers>
      <add name="ByteartRetailCacheManager" type="Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" expirationPollFrequencyInSeconds="600" maximumElementsInCacheBeforeScavenging="1000" numberToRemoveWhenScavenging="10" backingStoreName="NullBackingStore" />
      <!--
          expirationPollFrequencyInSeconds:過期(qi)時(shi)間(seconds)
          maximumElementsInCacheBeforeScavenging:緩沖中的(de)最大(da)元(yuan)素數量
          numberToRemoveWhenScavenging:一次移(yi)除的(de)數量
      -->
    </cacheManagers>
    <backingStores>
      <add type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.NullBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="NullBackingStore" />
    </backingStores>
  </cachingConfiguration>

 

C#程序部分

           //創(chuang)建容(rong)器  
            IUnityContainer container = new UnityContainer();
            //注冊映射  
            container.RegisterType<IOrderRepository, OrderRepository>();
            //添加unity擴展(zhan),擴展(zhan)類型是一(yi)個(ge)攔(lan)截器(qi)
            container.AddNewExtension<Interception>();
            //為(wei)接(jie)口IOrderRepository注(zhu)冊攔截器,它(ta)的方式是接(jie)口攔截器,攔截器的實現是一個行為(wei),它(ta)的實現體(ti)是Project.InterceptionBehaviors.CachingBehavior
            container.RegisterType<IOrderRepository, OrderRepository>(
               new Interceptor<InterfaceInterceptor>(),
               new InterceptionBehavior<Project.InterceptionBehaviors.CachingBehavior>());

OK,我們看了兩(liang)種攔截器的(de)實(shi)現(xian),選用哪種方(fang)式完全是看你的(de)具體場合了,呵(he)呵(he).

對緩存組件的封裝請下載

回到目錄

posted @ 2013-12-09 16:17  張占嶺  閱讀(3395)  評論(1)    收藏  舉報