AOP(面向方面编程),当面向对象遭遇业务的全面需求时候(最常被用来举例的需求就是业务的需要权限验证,与钱相关模块和财务挂钩) ,面向对象有些力不从心,这时候会出现aop出来救苦难于水火的程序员。
WebSharp 是个不太出名的轻量级的.net框架包括了ORM,AOP 等开源软件。由http://www.uml.org.cn 在支撑着。
(欢迎有兴趣的人去下载咯)简单的框架对我们这些菜鸟的好处就是,看起来能简单些,虽然我们还有很多不懂,由于代码少点所以要照顾的地方少些,痛苦就少点。
下面我就说说websharp的AOP吧 ,先从间简单的说吧,把我理解的先说吧 。(是不是犯法我就不知道了,如果是给我发个邮件吧,跟我索赔 我不到三千的工资,养我自己还不够 )。
1.首先 AOP也就是拦截,注入咯。注入的时间无非是三种 执行前,执行后,前后都注入 。所以我们定义了注入类型 (enum)
public
enum
InjectPosition
{
Before,
After,
Both
}
2.前后我们做些什么事情 这些事情用函数来表达咯,所以就定义了接口,对于以后要参加影响别人的类都要继承这个的接口IAspect 两个方法 Pre,Post.
public
interface
IAspect
{
void PreProcess(IMessage message);
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
void PostProcess(IMessage message);
}
3..net的AOP基本上都是靠System.Runtime.Remoting空间下的类库来解决咯 ,这个类库下面的类起的名字怪怪的(关键是自己的英语差 ),所以看起来也没有多大兴趣。
要被注入的类都要继承 类 ContextBoundObject ,原因是他支持上下文绑定
websharp 这样做的
public
abstract
class
AspectObject : ContextBoundObject
{
}
4.要使对象受影响 那就的给他加个Attribute 靠反射了。高手们都说反射的性能差,我还不知道他们是怎么干活的
所以定义了属性AspectManageAttribute 继承了ProxyAttribute (他们太强了 这个都知道)
[AttributeUsage(AttributeTargets.Class)]
[SecurityPermission(SecurityAction.Demand, Flags
=
SecurityPermissionFlag.Infrastructure)]
public
class
AspectManageAttribute : ProxyAttribute
{
private bool aspectManaged;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
public AspectManageAttribute()
{ }
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
public AspectManageAttribute(bool isAllow)
{
aspectManaged = isAllow;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
public override MarshalByRefObject CreateInstance(Type serverType)
{
MarshalByRefObject mobj = base.CreateInstance(serverType);
MarshalByRefObject retobj = null;
if (aspectManaged)
{
RealProxy realProxy = new AspectProxy(serverType, mobj);
retobj = realProxy.GetTransparentProxy() as MarshalByRefObject;
}
return retobj;
}
重要的这个重写的方法。
剩下的以后再写
WebSharp 是个不太出名的轻量级的.net框架包括了ORM,AOP 等开源软件。由http://www.uml.org.cn 在支撑着。
(欢迎有兴趣的人去下载咯)简单的框架对我们这些菜鸟的好处就是,看起来能简单些,虽然我们还有很多不懂,由于代码少点所以要照顾的地方少些,痛苦就少点。
下面我就说说websharp的AOP吧 ,先从间简单的说吧,把我理解的先说吧 。(是不是犯法我就不知道了,如果是给我发个邮件吧,跟我索赔 我不到三千的工资,养我自己还不够 )。
1.首先 AOP也就是拦截,注入咯。注入的时间无非是三种 执行前,执行后,前后都注入 。所以我们定义了注入类型 (enum)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
2.前后我们做些什么事情 这些事情用函数来表达咯,所以就定义了接口,对于以后要参加影响别人的类都要继承这个的接口IAspect 两个方法 Pre,Post.
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
要被注入的类都要继承 类 ContextBoundObject ,原因是他支持上下文绑定
websharp 这样做的
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
所以定义了属性AspectManageAttribute 继承了ProxyAttribute (他们太强了 这个都知道)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
剩下的以后再写