c# ioc 单例模式_C#使用Autofac实现控制反转IoC和面向切面编程AOP

Autofac是一个.net下非常优秀,性能非常好的IOC容器(.net下效率最高的容器),加上AOP简直是如虎添翼。Autofac的AOP是通过Castle(也是一个容器)项目的核心部分实现的,名为Autofac.Extras.DynamicProxy,顾名思义,其实现方式为动态代理。

使用方式比较简单,先新建一个控制台项目,然后在Nuget上搜索Autofac.Aop并安装,如下顺序:

或者通过命令安装:

Install-Package Autofac.Aop

安装成功之后会项目会增加几个个引用,如下图:

1. 创建拦截器

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;//先在Nuget上搜索Autofac.Aop安装

usingCastle.DynamicProxy;namespaceAutofacDEMO

{///

///拦截器 需要实现 IInterceptor接口 Intercept方法///

public classLogInterceptor : IInterceptor

{///

///拦截方法 打印被拦截的方法执行前的名称、参数和方法执行后的 返回结果///

/// 包含被拦截方法的信息

public voidIntercept(IInvocation invocation)

{

Console.WriteLine("方法执行前:拦截{0}类下的方法{1}的参数是{2}",

invocation.InvocationTarget.GetType(),

invocation.Method.Name,string.Join(",", invocation.Arguments.Select(a => (a ?? "").ToString()).ToArray()));//在被拦截的方法执行完毕后 继续执行

invocation.Proceed();

Console.WriteLine("方法执行完毕,返回结果:{0}", invocation.ReturnValue);

Console.WriteLine();

}

}

}

View Code

2. 创建拦截容器

var builder = new ContainerBuilder();

3.注册拦截器到Autofac容器

拦截器必须注册到Aufofac容器中,可以通过拦截器类型或者命名注入,这两种方式会让使用拦截器的方法有所不同

//命名注入

builder.Register(c => new LogInterceptor()).Named("log-calls");//类型注入

builder.Register(c => newLogInterceptor());

//或者

builder.RegisterType();

4. 启用拦截器

启用拦截器主要有两个方法:EnableInterfaceInterceptors(),EnableClassInterceptors()。

EnableInterfaceInterceptors方法会动态创建一个接口代理

EnableClassInterceptors方法会创建一个目标类的子类代理类,这里需要注意的是只会拦截

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值