首先实现ICallHandler接口,得到自己的AOP,然后如下配置
<?xml version="1.0" encoding="utf-8" ?>
<!--<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">
<!--新增配置节扩展,用于下面的<interception>配置节-->
<sectionExtension type="Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationExtension,Microsoft.Practices.Unity.Interception.Configuration" />
<alias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager,Microsoft.Practices.Unity" />
<alias alias="external" type="Microsoft.Practices.Unity.ExternallyControlledLifetimeManager, Microsoft.Practices.Unity" />
<alias alias="interception" type="Microsoft.Practices.Unity.InterceptionExtension, Microsoft.Practices.Unity.Interception" />
<alias alias="transparentProxy" type="Microsoft.Practices.Unity.InterceptionExtension.TransparentProxyInterceptor, Microsoft.Practices.Unity.Interception" />
<alias alias="typeMatchingRule" type="Microsoft.Practices.Unity.InterceptionExtension.TypeMatchingRule, Microsoft.Practices.Unity.Interception"/>
<alias alias="memberNameMatchingRule" type="Microsoft.Practices.Unity.InterceptionExtension.MemberNameMatchingRule, Microsoft.Practices.Unity.Interception"/>
<alias alias="ICustomerRepository" type="AzureCRM.Domain.Model.BaseModel.Entity.Aggregates.CustomerAgg.ICustomerRepository,AzureCRM.Domain.Model" />
<alias alias="CustomerRepository" type="AzureCRM.Infrastructure.Data.Repositories.BaseModel.Repositories.CustomerRepository,AzureCRM.Infrastructure.Data.Repositories" />
<alias alias="ILogAop" type="AzureCRM.Infrastructure.Crosscutting.Aop.Aspects.ILogAop,AzureCRM.Infrastructure.Crosscutting" />
<alias alias="LogAop" type="AzureCRM.Infrastructure.Crosscutting.NetFramework.Aop.Aspects.LogAop,AzureCRM.Infrastructure.Crosscutting.NetFramework" />
<alias alias="ExceptionAop" type="AzureCRM.Infrastructure.Crosscutting.NetFramework.Aop.Aspects.ExceptionAop,AzureCRM.Infrastructure.Crosscutting.NetFramework" />
<alias alias="IOut" type="AzureCRM.Infrastructure.CrossCutting.NetFramework.Test.Aop.IOut,AzureCRM.Infrastructure.CrossCutting.NetFramework.Test" />
<alias alias="Out" type="AzureCRM.Infrastructure.CrossCutting.NetFramework.Test.Aop.Out,AzureCRM.Infrastructure.CrossCutting.NetFramework.Test" />
<containers>
<container name="AzureCRMContainer">
<extension type="Interception" />
<interception>
<!--第一种策略,直接指定匹配规则-->
<policy name="LogAopPolicy">
<matchingRule name="LogMatching" type="NamespaceMatchingRule">
<constructor>
<param name="namespaceName" value="AzureCRM.Infrastructure.CrossCutting.NetFramework.Test.Aop" />
</constructor>
</matchingRule>
<callHandler name="Log" type="LogAop" />
</policy>
<!--第二种策略,只指定匹配规则名,后面注册规则名-->
<policy name="ExceptionAopPolicy">
<matchingRule name="ExceptionAopMatching" />
<callHandler name="exception" type="ExceptionAop" />
</policy>
</interception>
<register type="IOut" mapTo="Out">
<interceptor type="TransparentProxyInterceptor" />
<interceptionBehavior type="PolicyInjectionBehavior" />
</register>
<!--注册匹配规则-->
<register type="IMatchingRule" name="ExceptionAopMatching" mapTo="MemberNameMatchingRule">
<constructor>
<param name="nameToMatch" value="Console*" />
</constructor>
</register>
</container>
</containers>
</unity>
<!--</configuration>-->
<!--<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">
<!--新增配置节扩展,用于下面的<interception>配置节-->
<sectionExtension type="Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationExtension,Microsoft.Practices.Unity.Interception.Configuration" />
<alias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager,Microsoft.Practices.Unity" />
<alias alias="external" type="Microsoft.Practices.Unity.ExternallyControlledLifetimeManager, Microsoft.Practices.Unity" />
<alias alias="interception" type="Microsoft.Practices.Unity.InterceptionExtension, Microsoft.Practices.Unity.Interception" />
<alias alias="transparentProxy" type="Microsoft.Practices.Unity.InterceptionExtension.TransparentProxyInterceptor, Microsoft.Practices.Unity.Interception" />
<alias alias="typeMatchingRule" type="Microsoft.Practices.Unity.InterceptionExtension.TypeMatchingRule, Microsoft.Practices.Unity.Interception"/>
<alias alias="memberNameMatchingRule" type="Microsoft.Practices.Unity.InterceptionExtension.MemberNameMatchingRule, Microsoft.Practices.Unity.Interception"/>
<alias alias="ICustomerRepository" type="AzureCRM.Domain.Model.BaseModel.Entity.Aggregates.CustomerAgg.ICustomerRepository,AzureCRM.Domain.Model" />
<alias alias="CustomerRepository" type="AzureCRM.Infrastructure.Data.Repositories.BaseModel.Repositories.CustomerRepository,AzureCRM.Infrastructure.Data.Repositories" />
<alias alias="ILogAop" type="AzureCRM.Infrastructure.Crosscutting.Aop.Aspects.ILogAop,AzureCRM.Infrastructure.Crosscutting" />
<alias alias="LogAop" type="AzureCRM.Infrastructure.Crosscutting.NetFramework.Aop.Aspects.LogAop,AzureCRM.Infrastructure.Crosscutting.NetFramework" />
<alias alias="ExceptionAop" type="AzureCRM.Infrastructure.Crosscutting.NetFramework.Aop.Aspects.ExceptionAop,AzureCRM.Infrastructure.Crosscutting.NetFramework" />
<alias alias="IOut" type="AzureCRM.Infrastructure.CrossCutting.NetFramework.Test.Aop.IOut,AzureCRM.Infrastructure.CrossCutting.NetFramework.Test" />
<alias alias="Out" type="AzureCRM.Infrastructure.CrossCutting.NetFramework.Test.Aop.Out,AzureCRM.Infrastructure.CrossCutting.NetFramework.Test" />
<containers>
<container name="AzureCRMContainer">
<extension type="Interception" />
<interception>
<!--第一种策略,直接指定匹配规则-->
<policy name="LogAopPolicy">
<matchingRule name="LogMatching" type="NamespaceMatchingRule">
<constructor>
<param name="namespaceName" value="AzureCRM.Infrastructure.CrossCutting.NetFramework.Test.Aop" />
</constructor>
</matchingRule>
<callHandler name="Log" type="LogAop" />
</policy>
<!--第二种策略,只指定匹配规则名,后面注册规则名-->
<policy name="ExceptionAopPolicy">
<matchingRule name="ExceptionAopMatching" />
<callHandler name="exception" type="ExceptionAop" />
</policy>
</interception>
<register type="IOut" mapTo="Out">
<interceptor type="TransparentProxyInterceptor" />
<interceptionBehavior type="PolicyInjectionBehavior" />
</register>
<!--注册匹配规则-->
<register type="IMatchingRule" name="ExceptionAopMatching" mapTo="MemberNameMatchingRule">
<constructor>
<param name="nameToMatch" value="Console*" />
</constructor>
</register>
</container>
</containers>
</unity>
<!--</configuration>-->