zoukankan      html  css  js  c++  java
  • [EntLib]微软企业库5.0 学习之路 Unity&PIAB 配置

      之前写过一篇Unity和PIAB的文章,但是那是将Unity和PIAB的配置信息写在同一个文件中,如果在真正项目中,这样会很造成配置信息的混乱。今天就看看怎么分开配置文件。

      Unity 配置文件。

    <?xml version="1.0"?>
    <configuration>
      <configSections>
        <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/>
      </configSections>
    
      <unity xmlns="http://schemas.microsoft.com/practices/2010/unity">  

        <assembly name="..."/>
        <namespace name="..."/>
        <namespace name="..."/>
    <!--新增配置节扩展,用于下面的<interception>配置节--> <sectionExtension type="Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationExtension, Microsoft.Practices.Unity.Interception.Configuration" /> <container name="AutohomeDal"> <!--为容器增加Interception扩展,如不增加下面interception配置会报错--> <extension type="Interception"/> <container name="AutohomeService"> <register type="IAutoModelCompareCreator" mapTo="AutoModelCompareCreator"> <interceptor isDefaultForType="true" type="InterfaceInterceptor"/> <interceptionBehavior type="PolicyInjectionBehavior"/> </register> <container>

      AOP配置文件。

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <section name="policyInjection" type="Microsoft.Practices.EnterpriseLibrary.PolicyInjection.Configuration.PolicyInjectionSettings, Microsoft.Practices.EnterpriseLibrary.PolicyInjection, Version=5.0.414.0, Culture=neutral, PublicKeyToken=null" requirePermission="true" />
      </configSections>
      <policyInjection>
        <policies>
          <add name="myPolicy">
            <matchingRules>
              <add type="Microsoft.Practices.EnterpriseLibrary.PolicyInjection.MatchingRules.MemberNameMatchingRule, Microsoft.Practices.EnterpriseLibrary.PolicyInjection, Version=5.0.414.0, Culture=neutral, PublicKeyToken=null"
                            name="Member Name Matching Rule">
                <matches>
                  <add match="Create*" />
                </matches>
              </add>
            </matchingRules>
            <handlers>
              <add type="Autohome.CMS.FragmentCreator.Aop.FragmentCallHandler,Autohome.CMS.FragmentCreator, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
                           name="FragmentCallHandler" />
            </handlers>
          </add>
        </policies>
      </policyInjection>
    </configuration>

      其实最关键的是,将这两个配置文件信息注入的IUnityContainer 对象中。

       private IUnityContainer GetUnityContainer()
            {
                ////根据文件名获取指定config文件
                string filePath = AppDomain.CurrentDomain.BaseDirectory + @"App_Data/Configs/Unity.config";
                var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = filePath };
                //从config文件中读取配置信息
                Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
                var unitySection = (UnityConfigurationSection)configuration.GetSection("unity");
                var container = new UnityContainer();
                foreach (var item in unitySection.Containers)
                {
                    container.LoadConfiguration(unitySection, item.Name);
                }
    
                //上面是上篇讲的DI依赖注入XML文件的读取,下面是本篇讲的AOP的XML文件读取   
                string filePath1 =AppDomain.CurrentDomain.BaseDirectory + @"App_Data/Configs/Aop.config";
                var fileSource = new FileConfigurationSource(filePath1);
                var configurationSection = (PolicyInjectionSettings)fileSource.GetSection("policyInjection");
    
                if (configurationSection != null)
                {
                    configurationSection.ConfigureContainer(container, fileSource);
                }
    
                return container;
            }

      本文只是为了说明将IOC和AOP的配置分开,如何加载配置。至于他们结合的其他细节请参考

    http://www.cnblogs.com/dyfzwj/archive/2011/11/21/2257279.html

  • 相关阅读:
    关于svcutil.exe
    为什么说上ERP找死?
    竞争软件微信公众号上线
    无需ORM的数据库
    日期格式化和计算工具
    数据格式化工具
    Redis集群安装
    guava入门学习3(集合工具)
    guava入门学习2(新集合)
    mac环境下基于jdk1.8,maven搭建dubbo,zookeeper入门小案例
  • 原文地址:https://www.cnblogs.com/dyfzwj/p/2267737.html
Copyright © 2011-2022 走看看