RealProxy实现AOP编程(2)
稍微变化一下!注意区别。
Program.cs
class Program
{
  static void Main(string[] args)
  {
    User user = " };
    var processor = TransparentProxy.Create(new UserProcessor());
    processor.Shopping(user);
    Console.ReadLine();
  }
}
User.cs
public class User
{
  public string Name { get; set; }
  public string Password { get; set; }
}
IUserProcessor.cs
public interface IUserProcessor
{
  void Shopping(User user);
}
UserProcessor.cs
public class UserProcessor : IUserProcessor
{
  public void Shopping(User user)
  {
    Console.WriteLine("买呀,买呀,买桃子!");
  }
}
UserProxyProcessor.cs
class UserProxyProcessor<T> : RealProxy
{
  private T processor;
  public UserProxyProcessor(T processor) :
    base(typeof(T))//不能丢
  {
    this.processor = processor;
  }
  public override IMessage Invoke(IMessage msg)
  {
    PreShopping();
    IMethodCallMessage message = (IMethodCallMessage)msg;
    object result = message.MethodBase.Invoke(processor, message.Args);
    PostShopping();
    ], , null, message);
  }
  private void PreShopping()
  {
    Console.ForegroundColor = ConsoleColor.Red;
    Console.WriteLine("买东西前,判断是否注册了!");
    Console.ResetColor();
  }
  private void PostShopping()
  {
    Console.ForegroundColor = ConsoleColor.Red;
    Console.WriteLine("买完东西后,写个日志文件!");
    Console.ResetColor();
  }
}
TransparentProxy.cs
public static class TransparentProxy
{
  public static IUserProcessor Create(IUserProcessor obj)
  {
    var processor = new UserProxyProcessor<IUserProcessor>(obj);
    IUserProcessor transparentProxy = (IUserProcessor)processor.GetTransparentProxy();
    return transparentProxy;
  }
}
RealProxy实现AOP编程(2)的更多相关文章
- RealProxy实现AOP编程(1)
		
Program.cs class Program { static void Main(string[] args) { User user = " }; var processor = T ...
 - .Net中的RealProxy实现AOP
		
序言 这个AOP要从我们公司的一个事故说起,前段时间公司的系统突然在乌云中出现,数据被泄露的一览无余,乌云上显示是SQL注入攻击.呵,多么贴近生活的一个露洞,可谓是人尽皆知啊.然而却华丽丽的给拉我们一 ...
 - 【原】iOS动态性(三) Method Swizzling以及AOP编程:在运行时进行代码注入
		
概述 今天我们主要讨论iOS runtime中的一种黑色技术,称为Method Swizzling.字面上理解Method Swizzling可能比较晦涩难懂,毕竟不是中文,不过你可以理解为“移花接木 ...
 - 使用spring方式来实现aop编程
		
1:什么是aop? Aspect Oriented Programming 面向切面编程 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译 ...
 - Spring学习笔记之四----基于Annotation的Spring AOP编程
		
你能使用@Aspect annotation将某个Java类标注为Aspect,这个Aspect类里的所有公有方法都可以成为一个Advice,Spring提供了5个Annotation去将某个方法标注 ...
 - 聊Javascript中的AOP编程
		
Duck punch 我们先不谈AOP编程,先从duck punch编程谈起. 如果你去wikipedia中查找duck punch,你查阅到的应该是monkey patch这个词条.根据解释,Mon ...
 - 基于ASP.NET MVC的热插拔模块式开发框架(OrchardNoCMS)--AOP编程
		
AOP编程在目前来说好像是大家都比较喜欢的.ASP.NET MVC中的Filter就是使用AOP实现的配置器模式.AOP在编码中的应用主要有如下几个方面: 日志记录,跟踪,优化和监控 事务的处理 持久 ...
 - struts2.1笔记03:AOP编程和拦截器概念的简介
		
1.AOP编程 AOP编程,也叫面向切面编程(也叫面向方面):Aspect Oriented Programming(AOP),是目前软件开发中的一个热点,也是Spring框架中的一个重要内容.利用A ...
 - Method Swizzling以及AOP编程:在运行时进行代码注入-备用
		
概述 今天我们主要讨论iOS runtime中的一种黑色技术,称为Method Swizzling.字面上理解Method Swizzling可能比较晦涩难懂,毕竟不是中文,不过你可以理解为“移花接木 ...
 
随机推荐
- 绑定多个ddl
			
添加材料,需要绑定材料类型.设备名称.省份和所属终端客户等信息,前台页面如下: 前台.aspx <asp:Content ID="Content2" ContentPlace ...
 - java动手动脑和课后实验型问题String类型
			
1.请运行以下示例代码StringPool.java,查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? true true false 总结: 使用new关键字创建字符串对象时, 每次申请 ...
 - BZOJ 1189  二分匹配  ||  最大流
			
1189: [HNOI2007]紧急疏散evacuate Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1155 Solved: 420[Submi ...
 - 高性能javascript(记录二)
			
js中有四种基本的数据存取位置.分别是:字面量.本地变量.数组元素.对象成员. 字面量:只代表自身,不存储在特定位置.js的字面量有:字符串.数字.布尔值.对象.数组.函数.正则表达式.以及特殊的nu ...
 - Javascript中String()与new String()的差异
			
这里主要关注的是值类型和引用类型. 我们知道在javascript中的变量在内存中的存储有两种形式,值类型存储和引用类型存储. 通常可以进行值存储的包括 字符串类型,布尔值类型,数字类型,他们都包含 ...
 - 安卓自动化测试:Android studio 自带的 Record Espresso Test  ||  [ Appium & (Android studio || Python|| Eclipse ) ]
			
1.Android studio 自带的 Record Espresso Test https://developer.android.com/studio/test/espresso-test-r ...
 - Python Day04
			
一.迭代器与生成器: 迭代器(iterator): 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,迭代器的一大优点是不要求事 ...
 - CodeForces 474B  E(Contest #1)
			
题意: 给你一个数n,代表n段区间,接下来有n个数(a1,a2,...an)代表每段区间的长度,第一段区间为[1,a1],第二段区间为[a1+1,a1+a2],...第i段区间为[ai-1+1,ai- ...
 - java 读取properties文件
			
import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class Ge ...
 - Erlang&RabbitMQ服务安装配置
			
RabbitMQ是流行的开源消息队列系统,是AMQP(Advanced Message Queuing Protocol高级消息队列协议)的标准实现,用erlang语言开发.RabbitMQ据说具有良 ...