Castle is an open source project for .net that aspires to simplify the development of enterprise and web applications. Offering a set of tools (working together or independently) and integration with others open source projects, Castle helps you get more done with less code and in less time.
官方网址:http://www.castleproject.org/index.html
Castle是针对.NET平台的一个开源项目,从数据访问框架ORM到IOC容器,再到WEB层的MVC框架、AOP,基本包括了整个开发过程中的所有东西,为我们快速的构建企业级的应用程序提供了很好的服务。
以下转自http://wj.cnblogs.com/archive/2005/06/22/179357.html
1)关于Castle 的 IOC 容器:
●Castle Windsor
Windsor是Castle的IOC容器(built on top of a MicroKernel),包含几个概念:
组件(Component)
服务(Service)
扩张单元插件(Facilities)
我是这样理解他们之间的关系的:组件提供服务,也就是服务是一个个接口,而Facilities提供扩张容器管理组件的能力。我们可以直接使用组件,
也可以把组件转换成相应的服务接口来使用。也可以这么说,Component是普通的组件,Facilities是带有注入性质的组件。
●自动装配(Auto-wiring)
自动装配的意思是指由容器自动管理组件之间的依赖关系,而无需编写特定的xml config来配置依赖关系,spring和castle都支持自动装配,但是spring文档中是不推荐使用自动装配的,castle本身就是自动装配的,这是他们之间一个很大的区别。
spring不推荐自动装配的原因是:手动控制依赖关系让你自知道自己在做什么,有利于规范文档。
而castle作者是这样认为的:不使用自动装配,配置文档极之冗长,当组件配置到一定数目时候,管理起来就非常困难。
对比之下,如果我们要改变一个依赖关系或者增加一个组件依赖,使用Castle是比Spring容易得多的。
●扩张单元(Facilities)
如果你想扩张容器的功能,你可以通过创建扩张单元达到目的。
Castle提供有一系列的扩张单元,你也可以建立自己的扩展单元。这些扩张单元是可以重用的,你可以在扩张单元里面订阅容器事件,给组件附加属性,建立拦截器,控制组件生命周期等。
在spring里面,如果要拓展容器的功能,相信就要实现自己的容器,比如从XmlObjectFactory继承下来,相比之下,Castle是通过一种“插件”的形式达到目的,优势是明显的。
关于Castle提供的Facilities请参见:
http://www.castleproject.org/index.php/Facilities
2)关于Castle的AOP
AspectSharp 是Castle提供的AOP轻量级框架,AspectSharp是建立在DynamicProxy的基础上,同时Castle提供了AspectSharp 的Facilities使你可以更容易的在IOC容器里面应用Aspect#。
3)Castle Project ActiveRecord
如果你的项目中使用Nhnbernate作为数据库持久层,有了这个你就可以废弃掉hbm.xml文件了,activeRecord通过Attribute来配置持久类,而且配合ActiveRecord Generater可以很方便的生成,管理持久类代码,而不用去找生成机的烦恼。我原本是用CodeSmith写了一个Nhibernate的模板,看来可以丢掉了,不过目前我对ActiveRecord没有更多的尝试。
4)
Castle Project DynamicProxy
实现动态代理,在Java里面有专门的库来实现代理,而。net的却没有动态代理的相关库,Castle DynamicProxy来弥补这个不足,他是基于Emit技术的。写本文为止的版本是1.1.0.0,算是很成熟的了。而且AOP,Nhibernate,IBatis都有用到DynamicProxy,了解他是非常重要的,网络上已经有很多介绍DynamicProxy的文章,我会转载在论坛上作为资料收集,了解他是你进行对其他技术研究的基础。
5)
Castle Project MonoRail
MonoRail 原名叫Castle on Rails,他涉及到“Action Pack”的概念,具体请参见:
http://ap.rubyonrails.org/
(MonoRail is an attempt to provide a port of Action Pack for .Net. The Action Pack way of development is extremelly productive, very intuitive and easily testable. )