介绍
- Castle最早在2003年诞生于Apache Avalon项目,目的是为了创建一个IOC(控制反转)框架。发展到现在已经有四个组件了,分别是ActiveRecord(ORM组件),Windsor(IOC组件),DynamicProxy(动态代理组件),MonoRail(Web MVC组件)。
- 中文文档地址
- GitHub地址
Ioc和Ioc容器
-
Inversion of Control
控制反转,即开发者使用api和调用api代码相反。 - IoC容器使用上面所述的(简言之)原则管理类。包括,它们的创建,销毁,生命期,配置和依赖关系。这样类并不需要获取并配置它们所依赖的类。这在系统中极大地减少了耦合,并且简化了重用和可测试性。
三要素
- 服务
- 组件
- 依赖
组件如何创建
1.组成
- 容器注册组件后,定位处理器
检查所请求的组件是否被注册 容器中,就是我们平时有没有把实现类和接口注册到容器中!
没找到的话会尝试延时注册,要是还是没有找到,抛出异常,ComponentNotFoundException
- 处理器invoke dynamic parameters
- 生命周期方式管理
控制组件激活器
- 组件激活
内部activator动态创建实例
ComponentCreated
,返回到生命周期管理器中
调用模式
在应用中只需要在三个地方调用容器,准确的说是在项目的入口处和出口处:
项目入口指的是.exe中的Program.Main 方法,web应用中的 Application_Start 和 Application_End 或 其他类型应用的对应地方。
- Install --创建并配置安装器,以便可以在容器中注册组件。
- Resolve --通过类型或名称来解析服务。
- Dispose --容器管理组件的整个生命期,在关闭应用之前需要关闭容器,关闭容器之前会停用它管理的所有组件(比如回收它们)。这就是为什么在关闭应用之前调用container.Dispose()是如此重要。