我们将在Unity IOC容器配置——使用配置文件这篇文章的基础上,扩展AOP。
这里只做简单的示例。详细过程以后再补🙉
1.引入需要的包
需要引入相关的包有
这些都可以在NuGet管理里找到
2.创建用于记录日志的Behavior
namespace Unity.Core.Behavior
{
public class LogBehavior : IInterceptionBehavior
{
public bool WillExecute { get { return true; } }
public IEnumerable<Type> GetRequiredInterfaces()
{
return Type.EmptyTypes;
}
public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext)
{
Console.WriteLine($"{DateTime.Now}执行了{input.MethodBase.Name}方法");
return getNext.Invoke().Invoke(input, getNext);
}
}
}
3.修改配置文件,注册Behavior
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<!--Unity IOC-->
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Unity.Configuration"/>
</configSections>
<unity>
<!--配置AOP-->
<sectionExtension type="Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationExtension, Unity.Interception.Configuration"/>
<containers>
<container name="IQueryContainer">
<!--扩展方式-->
<extension type="Interception"/>
<!--Unity.Interface.IQuery指类/接口的完成类型名,Unity.Interface指类/接口所在的dll-->
<register type="Unity.Interface.IQuery, Unity.Interface" mapTo="Unity.Service.Query, Unity.Service">
<!--扩展-->
<interceptor type="InterfaceInterceptor"/>
<!--注册需要的Behavior-->
<interceptionBehavior type="Unity.Core.Behavior.LogBehavior, Unity.Core"/>
</register>
</container>
</containers>
</unity>
</configuration>