http://www.cnblogs.com/zhengwl/p/5433181.html

Aop含义:aspect-oriented programming

  • 实现工具介绍

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

  • 组件安装和实现步骤

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<ICalculator>();
var test = handler.Add(1, 33);
Response.Write(test.ToString());
}
}

训练结束,

参考文档http://docs.autofac.org/en/v3.5.2/advanced/interceptors.html#enabling-interception

Autofac和DynamicProxy2搭配实现Aop动手训练的更多相关文章

  1. ASP.NET Core 整合Autofac和Castle实现自动AOP拦截

    前言: 除了ASP.NETCore自带的IOC容器外,我们还可以使用其他成熟的DI框架,如Autofac,StructureMap等(笔者只用过Unity,Ninject和Castle). 1.ASP ...

  2. Autofac 之 基于 Castle DynamicProxy2 的 Interceptor 功能

    Autofac 结合 Castle DynamicProxy2 功能        Autofac 不仅作为轻量级高效的 IoC 容器,而且还能很好的与 Castle.DynamicProxy2 结合 ...

  3. C#使用Autofac实现控制反转IoC和面向切面编程AOP

    Autofac是一个.net下非常优秀,性能非常好的IOC容器(.net下效率最高的容器),加上AOP简直是如虎添翼.Autofac的AOP是通过Castle(也是一个容器)项目的核心部分实现的,名为 ...

  4. 聊聊在AOP模式下的缓存方案

    面向方法的数据集缓存 使用了autofac做为ioc容器,使用Autofac.Extras.DynamicProxy2作为方法拦截器,缓存面向方法,直接在方法上添加CachingAttribute特性 ...

  5. 依赖注入在 dotnet core 中实现与使用:4. 集成 Autofac

    本示例使用 .net core 5 rc-1 实现. 1. 添加 Nuget 包引用 使用 Autofac 当然要添加 Autofac 的 Nuget 包,主要涉及到两个: Autofac.Exten ...

  6. 查看.NET Core源代码通过Autofac实现依赖注入到Controller属性

    一.前言 在之前的文章[ASP.NET Core 整合Autofac和Castle实现自动AOP拦截]中,我们讲过除了ASP.NETCore自带的IOC容器外,如何使用Autofac来接管IServi ...

  7. Mvc+Hui+SqlSugar+Autofac+NLog+T4 架构设计(一)

    一.前言 作为小菜鸟第一次写博客的我还有点小激动,最近开始打算着手写一个属于自己架构.算下来差不多最近花一周多的下班时间了来写这个框架,本来想整体架构开发完成测试完成后才写博客,怕自己没时间或失去动力 ...

  8. NET Core源代码通过Autofac实现依赖注入

    查看.NET Core源代码通过Autofac实现依赖注入到Controller属性   阅读目录 一.前言 二.使用Autofac 三.最后 回到目录 一.前言 在之前的文章[ASP.NET Cor ...

  9. net core天马行空系列:原生DI+AOP实现spring boot注解式编程

    写过spring boot之后,那种无处不在的注解让我非常喜欢,比如属性注入@autowire,配置值注入@value,声明式事物@Transactional等,都非常简洁优雅,那么我就在想,这些在n ...

随机推荐

  1. Javascript写了一个2048的游戏

    去年2048很火, 本来我也没玩过, 同事说如果用JS写 只要100多行代码: PS(iWeb峰会暨攻城师嘉年华2015嘉年华要来啦, 在文章结尾有具体的地址和时间): 今天试了一下, 逻辑也不复杂, ...

  2. 利用MVC的自定义过滤器FilterAttribute、IActionFilter、IExceptionFilter实现异常处理等功能

    今天在博客园上看了一篇推荐文章,还说得蛮有道理: http://www.cnblogs.com/richieyang/p/4779028.html 项目中确实有各种后台验证过程,最常见的莫过于判空,而 ...

  3. java-io-inputStream

    inputStream的方法 1. 关于InputStream.read()     在从数据流里读取数据时,为图简单,经常用InputStream.read()方法.这个方法是从流里每次只读取读取一 ...

  4. Java-URLConnection类详解

    抽象类 URLConnection 是所有类的超类,它代表应用程序和 URL 之间的通信链接.此类的实例可用于读取和写入此 URL 引用的资源.通常,创建一个到 URL 的连接需要几个步骤: open ...

  5. 控件(文本类): TextBox, PasswordBox

    介绍背水一战 Windows 10 之 控件(文本类) TextBox PasswordBox 示例1.TextBox 的示例 1Controls/TextControl/TextBoxDemo1.x ...

  6. C++开发的数据库连接查询修改小工具

    项目相关地址 源码:https://github.com/easonjim/SQL_Table_Tool bug提交:https://github.com/easonjim/SQL_Table_Too ...

  7. CMD.EXE中dir超长字符串缓冲区溢出原理学习

    最近看逍遥的<网络渗透攻击与安防修炼>讲到CMD命令窗口的dir传超长字符串溢出的例子.自己实验了一下,的确会产生程序崩溃,但是具体什么原理没太详细说,这里做一下原理探究,权当学习笔记了. ...

  8. K米测评

    第一部分 调研,评测 K米APP使用体验 从小五音不全,所以KTV这类地方我是能不去就不去的,更别说为了点个歌去下个APP,所以K米是我第一个点歌类APP.说说第一次上手的体验吧,APP颜值一般吧,U ...

  9. hdu 2034 - 集合操作

    题意:集合A,B,计算集合差A-B(求只在集合A内的数) 解法: 选用STL内的集合set 1.建立set 1: #include<set> 2:   3: set<int> ...

  10. POJ 2752Seek the Name, Seek the Fame(next数组妙用 + 既是前缀也是后缀)

    题目链接 题意:求一个字符串中 前缀 和 后缀 相同的长度 分析: 对于一个字符串他自己的长度肯定是可以的.然后如果满足 前缀 和 后缀相等,那个前缀 最后一个字符 一定 和 该字符串最后一个字符相等 ...