博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Autofac和DynamicProxy2搭配实现Aop动手训练
阅读量:6492 次
发布时间:2019-06-24

本文共 2811 字,大约阅读时间需要 9 分钟。

Aop含义:aspect-oriented programming

  • 实现工具介绍 

  Autofac是一个比较流行的Ioc组件,DynamicProxy2是 的一部分,提供了一个拦截框架

  • 组件安装和实现步骤

1.先打开vs新建一个web项目,打开nuget执行安装命令如下图所示

2.配置autofac

在Global.asax文件中在添加如下代码

1

2

3

4

5

6

7

public class Global : HttpApplication, IContainerProviderAccessor

{

static IContainerProvider _containerProvider;

// Instance property that will be used by Autofac HttpModules   // to resolve and inject dependencies.

public IContainerProvider ContainerProvider { get { return _containerProvider; } }

}

在Application_Start方法中配置

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

void Application_Start(object sender, EventArgs e)

{

// 在应用程序启动时运行的代码

RouteConfig.RegisterRoutes(RouteTable.Routes);

BundleConfig.RegisterBundles(BundleTable.Bundles);

// Build up your application container and register your dependencies.    

var builder = new ContainerBuilder();

// Once you're done registering things, set the container     // provider up with your registrations.  

builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly());

builder.RegisterType<Calculator>().EnableClassInterceptors().InterceptedBy(typeof(CallLogger)).As<ICalculator>();        

builder.RegisterType<CallLogger>();

var container = builder.Build();

_containerProvider = new ContainerProvider(container);

}

3.aop示例代码如下包含一个接口,一个实现类和一个拦截类

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

public interface ICalculator

{

int Add(int lhs, int rhs);

int Multiply(int lhs, int rhs);

}

[Intercept(typeof(CallLogger))]

public class Calculator : ICalculator

{

public virtual int Add(int lhs, int rhs)

{

return lhs + rhs;

}

public virtual int Multiply(int lhs, int rhs)

{

return lhs * rhs;

}

}

public class CallLogger : IInterceptor

{

TextWriter _output = HttpContext.Current.Response.Output;

//public CallLogger(TextWriter output)

//{

//    _output = output;

//}

public void Intercept(IInvocation invocation)

{

_output.Write("Calling method {0} with parameters {1}... ",

invocation.Method.Name,

string.Join(", ", invocation.Arguments.Select(a => (a ?? "").ToString()).ToArray()));

invocation.Proceed();

_output.WriteLine("Done: result was {0}.", invocation.ReturnValue);

}

}

  global文件中的代码已经写完,其引用应该包括如下几个

using Autofac;

using Autofac.Extras.DynamicProxy2;
using Autofac.Integration.Web;
using Castle.Core;
using Castle.DynamicProxy;

4.效果展现,在Page页添加如下代码,然后运行浏览。

public partial class _Default : Page    {        //public ICalculator handler { get; set; }        protected void Page_Load(object sender, EventArgs e)        {            var cpa = (IContainerProviderAccessor)HttpContext.Current.ApplicationInstance;            var cp = cpa.ContainerProvider;            var handler = cp.RequestLifetime.Resolve
(); var test = handler.Add(1, 33); Response.Write(test.ToString()); } }

训练结束,

参考文档

转载地址:http://zghuo.baihongyu.com/

你可能感兴趣的文章
The Competition
查看>>
LVM
查看>>
GdiPlus[26]: IGPPen: 用画刷建立画笔
查看>>
varnish 性能调优
查看>>
高可用网站的软件质量保证
查看>>
Libpcap tutorial-02
查看>>
java servlet简介-01
查看>>
中文乱码问题的处理
查看>>
Windows10 远程桌面连接失败,报CredSSP加密oracle修正错误解决办法
查看>>
egit在pull的时候出错
查看>>
Zabbix 中使用 Percona Monitoring Plugins 监控 MySQL
查看>>
我的友情链接
查看>>
5.Struts2-Struts标签
查看>>
各种技术综合总结(一)
查看>>
Filter案例用户自动登录学习笔记
查看>>
阿里云内网和公共NTP服务器
查看>>
c++ 正则表达式邮箱
查看>>
C 提高1 内存四区 变量本质 栈开口方向 指针铁律1
查看>>
QT windows平台安装
查看>>
Outlook 2003 邮件不能显示图片
查看>>