netcore使用AutoFac实现AOP
标签:action image tle 不能 on() 实现类 注入 ble 写日志
原文:netcore使用AutoFac实现AOP
第一步,添加程序集引用
在Nuget中搜索autofac找到Autofac.Extras.DynamicProxy并安装。
第二步:添加拦截器
///
/// 拦截器(实现 Castle.DynamicProxy.IInterceptor)接口
///
public class CustomAutoFacAOPInterception : IInterceptor
{
public void Intercept(IInvocation invocation)
{
Console.WriteLine("执行之前可以写日志、参数检查……");
//可以捕获异常
invocation.Proceed();
Console.WriteLine("执行之后可以写日志……");
}
}
///
/// person服务接口
///
public interface IPerson {
string Speak();
}
///
/// 接口的实现类
/// 注意,与Unity实现aop不同,autofac是作用于实现类而不是接口
///
[Intercept(typeof(CustomAutoFacAOPInterception))]
public class Person : IPerson
{
public string Speak()
{
return "你好,我是一个Person";
}
}
第三步,在注册模块注册拦截器并启用AOP拦截
///
/// AutoFac注册模块
///
public class CustomAutoFacModule: Autofac.Module
{
///
/// 重写父类的Load方法
///
///
protected override void Load(ContainerBuilder builder)
{
//1、注册拦截器
builder.Register(a => new CustomAutoFacAOPInterception());
//2、设置该类型允许AOP拦截
builder.RegisterType().As().EnableInterfaceInterceptors().SingleInstance();
builder.RegisterType().As().SingleInstance();//感叹,这语法,真的是不能再爽了
//后面可以注册好多类型……
//后面可以注册好多类型……
//后面可以注册好多类型……
//后面可以注册好多类型……
}
}
第四步,调用
public class InterceptDemoController : Controller
{
private IPerson _personService = null;
///
/// 构造注入
///
///
public InterceptDemoController(IPerson person)
{
_personService = person;
}
public IActionResult Index()
{
string rel = _personService.Speak();
return Content(rel);
}
}
netcore使用AutoFac实现AOP
标签:action image tle 不能 on() 实现类 注入 ble 写日志
原文地址:https://www.cnblogs.com/lonelyxmas/p/12549286.html
评论