.NEt专家博客!

【TomCat】.NET上下文拦截(1)

上一篇 / 下一篇  2008-05-19 15:31:30

    在.NET 中,上下文(Context)的概念贯穿着.NET的很多核心内容.他提供了类似运行环境的服务和内容.在.NET中,基于上下文拦截技术一直是很隐晦的,没有很多的文档说明。然儿,基于上下文的拦截的技术却提供了很好很强大的功能。使我们能方便是实现类似 AOP 的编程模式。.NET3.0 中的WCF更是大量使用了上下文拦截技术。ITPUB个人空间-g F}8Xp T3br"S
    在.NET 中,组件服务通常的颗粒是域(Domain)和上下文(Context).其中,在域中提供的服务通常只有'同步域'.当然,.NET 中也提供了很多COM+服务,但需要被服务的组件(类)直接或间接继承自ServicedComponent(被服务的组件)..NET中提供的COM+服务全部在命名空间System.EnterpriseServices中,在其中,提供了诸如消息队列,即时激活,对象池...等服务.
d/U9a\7H2C0    在使用.NET 开发时,我们都知道我们使用任何一种.NET支持的语言编写的代码都是托管代码.所谓托管代码生成的IL语言只能运行在CLR中.并且享受CLR提供的垃圾回收,托管堆...等.但是,Windows在为我们的IL运行提供一个进程时,并不知道所谓的托管环境,Windows只负责提供进程,在进程中没有托管环境的概念.在Windows 进程和IL之间,域提供了桥梁的作用。在Windows进程中,域提供了诸如垃圾回收,托管堆,和JIT,加载和卸载程序集等服务。也就是说,我们所有的IL代码必须运行在域中,当然,当我们启动一个.NET程序时,会创建一个默认的域来加载和运行我们的.NET程序,并提供托管堆。我们也可以创建新的域。所以,每个Windows 进程可以宿主多个域。在.NET中,对象是不能够跨域直接引用的,每个.NET对象都是他所属的域中的托管堆被创建的。对象的跨域访问,必须使用代理(Proxy),并且对象是可以被封送的(直接或间接继承自MarshalByRefObject),跨域访问对象就是所谓的远程访问(Remoting)。ITPUB个人空间 H}:PT,e@:W
    在.NET中域的粒度仍然很大,如果我们不显式的创建新的域,通常我们程序中的所有组件(类),都运行在同一个域中。在.NET中,上下文(Context),提供了比域粒度更小的运行环境。域可以有多个上下文,但一个上下文只能属于一个域。
9W1N0D[ ck4Uc0和域一样,我们的 .NET组件(类)也必须运行在不同的上下文中,只不过不同的上下文提供不同的上下文服务,每个域中也有一个默认的上下文,默认的上下文但是不提供任何的服务。上下文最大的好处是让我们可以使用上下文拦截技术,为被宿主在上下文的组件(类)提供自定义的服务。这样,我们就可以实现所谓AOP编程。我们可以把AOP中所谓的管道工作作成服务,添加到上固定的下文服务中,这样每个对这个上下文中的组件(类)的调用,都将被拦截,然后把服务(管道方法)添加到组件(类),就好象把服务(管道方法)织入(AOP术语)到组件(类)中.


TAG: aop net 上下文拦截

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-10-12  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 48216
  • 日志数: 1203
  • 影音数: 7
  • 文件数: 1
  • 建立时间: 2008-01-04
  • 更新时间: 2008-10-10

RSS订阅

Open Toolbar