Asp.net Core AOP实现(采用Autofac)
2021-02-03 20:16
标签:itop int enable sig containe method intercept 构造 load 新的.NET Core是基于.NET Standard的..所以我们在引用库的时候特别要注意相关的兼容问题. 添加Nuget包:Autofac.Extras.DynamicProxy 这里,需要继承IInterceptor,然后实现它的Intercept方法。我们直接将拦截内容输出到调试窗(正式项目请根据业务来操作拦截)。 这里注意,一定要在你注入的服务后面加上EnableInterfaceInterceptors来开启你的拦截 定义一个实现接口的类 然后我们运行代码. 这样,我们就完成了使用Autofac进行AOP拦截。 其实asp.net core自带的过滤器也够用了,这里只是记录下不同的实现方式。 AspNetCore3.0中 别忘了在Startup中注册服务 在控制器中使用 动动小手指关注我的博客,需要更多内容请关注微信订阅号,每周更新。 Asp.net Core AOP实现(采用Autofac) 标签:itop int enable sig containe method intercept 构造 load 原文地址:https://www.cnblogs.com/zhanwei103/p/13151587.html引用正确的库来实现AOP
在传统的ASP.NET中,使用过Autofac来进行AOP操作的,应该都知道这个库.
Autofac.Extras.DynamicProxy定义一个拦截器类,实现IInterceptor
public class TestInterceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
{
Console.WriteLine("你正在调用方法 \"{0}\" 参数是 {1}... ",
invocation.Method.Name,
string.Join(", ", invocation.Arguments.Select(a => (a ?? "").ToString()).ToArray()));
invocation.Proceed();
Console.WriteLine("方法执行完毕,返回结果:{0}", invocation.ReturnValue);
}
}
修改Startup的ConfigureContainer方法
public void ConfigureDevelopmentContainer(ContainerBuilder builder)
{
// 要先注册拦截器
builder.RegisterType
在需要使用拦截器的类或接口上添加描述
[Intercept(typeof(TestInterceptor))]
我这里是定义了一个接口,如下:[Intercept(typeof(TestInterceptor))]
public interface ITopicService
{
int Add(int a, int b);
}
public class TopicService:ITopicService
{
public int Add(int a,int b)
{
return a + b;
}
}
效果如下:
[Intercept(typeof(TestInterceptor))]
public class HomeController : Controller
{
private readonly ILogger
Autofac的AOP拦截器还有很多功能与用法.我这里就不一一举例了。动态代理的高级用法
一个接口多个实现
public interface ITestUtil
{
void Show(string content);
}
public class TestUtil1 : ITestUtil
{
public void Show(string content)
{
Console.WriteLine("TestUtil1:" + content);
}
}
public class TestUtil2 : ITestUtil
{
public void Show(string content)
{
Console.WriteLine($"TestUtil2:{content}");
}
}
builder.RegisterType
// 默认情况下,构造函数注入和属性注入的结果都是最后注册的那个实现,
// 也就是TestUtil2
private readonly ITestUtil _util;
public HomeController(ITestUtil util, IServiceProvider provider)
{
_util = util;
// 如果知道注册的顺序,可以用这种方式,
// 第一个注册是TestUtil1,所以这里返回TestUtil1
var util1 = provider.GetServices
下一篇:GitHub上传图片用
文章标题:Asp.net Core AOP实现(采用Autofac)
文章链接:http://soscw.com/index.php/essay/50574.html