Autofac和DynamicProxy2搭配实现Aop动手训练
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动手训练的更多相关文章
- ASP.NET Core 整合Autofac和Castle实现自动AOP拦截
前言: 除了ASP.NETCore自带的IOC容器外,我们还可以使用其他成熟的DI框架,如Autofac,StructureMap等(笔者只用过Unity,Ninject和Castle). 1.ASP ...
- Autofac 之 基于 Castle DynamicProxy2 的 Interceptor 功能
Autofac 结合 Castle DynamicProxy2 功能 Autofac 不仅作为轻量级高效的 IoC 容器,而且还能很好的与 Castle.DynamicProxy2 结合 ...
- C#使用Autofac实现控制反转IoC和面向切面编程AOP
Autofac是一个.net下非常优秀,性能非常好的IOC容器(.net下效率最高的容器),加上AOP简直是如虎添翼.Autofac的AOP是通过Castle(也是一个容器)项目的核心部分实现的,名为 ...
- 聊聊在AOP模式下的缓存方案
面向方法的数据集缓存 使用了autofac做为ioc容器,使用Autofac.Extras.DynamicProxy2作为方法拦截器,缓存面向方法,直接在方法上添加CachingAttribute特性 ...
- 依赖注入在 dotnet core 中实现与使用:4. 集成 Autofac
本示例使用 .net core 5 rc-1 实现. 1. 添加 Nuget 包引用 使用 Autofac 当然要添加 Autofac 的 Nuget 包,主要涉及到两个: Autofac.Exten ...
- 查看.NET Core源代码通过Autofac实现依赖注入到Controller属性
一.前言 在之前的文章[ASP.NET Core 整合Autofac和Castle实现自动AOP拦截]中,我们讲过除了ASP.NETCore自带的IOC容器外,如何使用Autofac来接管IServi ...
- Mvc+Hui+SqlSugar+Autofac+NLog+T4 架构设计(一)
一.前言 作为小菜鸟第一次写博客的我还有点小激动,最近开始打算着手写一个属于自己架构.算下来差不多最近花一周多的下班时间了来写这个框架,本来想整体架构开发完成测试完成后才写博客,怕自己没时间或失去动力 ...
- NET Core源代码通过Autofac实现依赖注入
查看.NET Core源代码通过Autofac实现依赖注入到Controller属性 阅读目录 一.前言 二.使用Autofac 三.最后 回到目录 一.前言 在之前的文章[ASP.NET Cor ...
- net core天马行空系列:原生DI+AOP实现spring boot注解式编程
写过spring boot之后,那种无处不在的注解让我非常喜欢,比如属性注入@autowire,配置值注入@value,声明式事物@Transactional等,都非常简洁优雅,那么我就在想,这些在n ...
随机推荐
- mysql之旅【第一篇】
1,基本操作 create databades 数据库名: #创建数据库 show databases; #显示存在的数据库 drop database 数据库名字 #删除数据库 2,数据库存储引擎介 ...
- CDN 备胎技巧
如果你使用 CDN 服务,建议准备一个备胎,万一 CDN 服务挂了,可以从自己的服务器上读取: <script src="http://cdn.staticfile.org/jquer ...
- win10 google浏览器设置
在浏览器地址栏中输入命令: chrome://flags/ 撤销:chrome设置了禁止此页弹出提示框 chrome://settings/contentExceptions#popups
- Visual Studio 2015正式版/产品密钥
Visual Studio 2015 发行说明: https://visualstudio.com/zh-cn/news/vs2015-vs.aspx Visual Studio 2015 特性简 ...
- 【HDU 4305】Lightning(生成树计数)
Problem Description There are N robots standing on the ground (Don't know why. Don't know how). Sudd ...
- wamp中修改后mysq数据库l闪退无法登陆解决办法
WampServer安装后密码是空的, 修改一般有三种方式: 一是通过phpMyAdmin直接修改: 二是使用WAMP的MySql控制台修改. 三是重置密码 第一种: 1 ...
- Hive 窗口函数、分析函数
1 分析函数:用于等级.百分点.n分片等 Ntile 是Hive很强大的一个分析函数. 可以看成是:它把有序的数据集合 平均分配 到 指定的数量(num)个桶中, 将桶号分配给每一行.如果不能平均分配 ...
- Spark Shell & Spark submit
Spark 的 shell 是一个强大的交互式数据分析工具. 1. 搭建Spark 2. 两个目录下面有可执行文件: bin 包含spark-shell 和 spark-submit sbin 包含 ...
- 【BZOJ-1113】海报PLA 单调栈
1113: [Poi2008]海报PLA Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 896 Solved: 573[Submit][Status ...
- 虚拟机克隆后找不到eth0
使用 VMware 虚拟机的克隆功能,快速复制已安装好的 Linux 系统. 克隆完成之后,发现没有 eth0 网卡. [解决方法] 1. 编辑 /etc/udev/rules.d/70-persis ...