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. dede使用方法----如何转换时间戳

    dede用sql调用一个mysql时间,mysql的时间字段是时间戳展示的,突然不知道咋转换了,有点迷茫,结果找了下,发现其实很简单,直接用dede的就行了,如下: 完整时间:[field:datel ...

  2. C# 后台json转换成时间格式

    1传入json 字符进行转换        public DateTime ConvertTime(string milliTime)        {            long timeTri ...

  3. yii的csv导出

    数据导出,简单的csv导出, public static function export($parameter){ if (is_array($parameter)) { $filename = da ...

  4. NPOI简介

    NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. (一)传统操作Excel遇到的问题: 1.如果是.NET,需要在服务器端 ...

  5. [cf621E]Wet Shark and Blocks

    Description 给定$n$个数和$b$个盒子,放一些数到盒子中,使得盒子不为空.每个盒子中的数是一样的,一个数可以被放到多个盒子中. 从每个盒子中取一个数,组成一个$b$位数,如果这个数$mo ...

  6. 【poj1013】 Counterfeit Dollar

    http://poj.org/problem?id=1013 (题目链接) 题意 12个硬币中有1个是假的,给出3次称重结果,判断哪个硬币是假币,并且判断假币是比真币中还是比真币轻. Solution ...

  7. 拼装query的sql语句

    com.kingdee.bos.metadata.query.util.QuerySqlAccessBase //打开一个绑定query界面,获取query查询的最终sql,231行

  8. IE的layout属性详解

    http://www.cnblogs.com/yuzhongwusan/archive/2012/03/09/2387052.html 很多在谷歌浏览器(chrome).火狐浏览器(Fire Fox) ...

  9. powershell小工具

    保存为.ps1文件Set-ExecutionPolicy UnrestrictedSet-ExecutionPolicy Restricted 1. 批量修改文件后缀 $CodeFileDir=&qu ...

  10. codevs 1001 舒适的路线(Kruskal)

    传送门 Description Z小镇是一个景色宜人的地方,吸引来自各地的观光客来此旅游观光.Z小镇附近共有N(1<N≤500)个景点(编号为1,2,3,…,N),这些景点被M(0<M≤5 ...