Castle Windsor介绍

介绍

  1. Castle最早在2003年诞生于Apache Avalon项目,目的是为了创建一个IOC(控制反转)框架。发展到现在已经有四个组件了,分别是ActiveRecord(ORM组件),Windsor(IOC组件),DynamicProxy(动态代理组件),MonoRail(Web MVC组件)。
  2. 中文文档地址
  3. GitHub地址

Ioc和Ioc容器

  1. Inversion of Control控制反转,即开发者使用api和调用api代码相反。
  2. IoC容器使用上面所述的(简言之)原则管理类。包括,它们的创建,销毁,生命期,配置和依赖关系。这样类并不需要获取并配置它们所依赖的类。这在系统中极大地减少了耦合,并且简化了重用和可测试性。

三要素

  1. 服务
  2. 组件
  3. 依赖

组件如何创建

1.组成

  • 容器注册组件后,定位处理器

检查所请求的组件是否被注册 容器中,就是我们平时有没有把实现类和接口注册到容器中!
没找到的话会尝试延时注册,要是还是没有找到,抛出异常,ComponentNotFoundException

  • 处理器invoke dynamic parameters
  • 生命周期方式管理

控制组件激活器

  • 组件激活

内部activator动态创建实例ComponentCreated,返回到生命周期管理器中

调用模式

Windsor 是 IoC 容器,也就是你一般不需要调用它,你的应用应该无视或不知道它的存在。与容器的交互(即调用容器的任何方法)应该限制在应用生命期的三个地方:

在应用启动的时候 (.exe中的Program.Main方法,web应用中的 Application_Start等等)创建容器,并调用容器的 Install 方法一次。注意你应该只有一个容器的实例。
只有一个地方(在 Main, ControllerFactory 等中) 可以调用 Resolve。If you need to callback to the container to pull some additional dependencies later on, use typed factories。
在应用结束的时候(web应用中的Application_End等等),调用容器的 Dispose 方法,让容器清理和释放所有组件。

  1. Install    --创建并配置安装器,以便可以在容器中注册组件。
  2. Resolve --通过类型或名称来解析服务。
  3. Dispose  --容器管理组件的整个生命期,在关闭应用之前需要关闭容器,关闭容器之前会停用它管理的所有组件(比如回收它们)。这就是为什么在关闭应用之前调用container.Dispose()是如此重要。
posted @ 2020-07-13 14:21  Linybo2008  阅读(1819)  评论(0编辑  收藏  举报