Castle Windsor介绍
介绍
- 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
,返回到生命周期管理器中
调用模式
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 方法,让容器清理和释放所有组件。
- Install --创建并配置安装器,以便可以在容器中注册组件。
- Resolve --通过类型或名称来解析服务。
- Dispose --容器管理组件的整个生命期,在关闭应用之前需要关闭容器,关闭容器之前会停用它管理的所有组件(比如回收它们)。这就是为什么在关闭应用之前调用container.Dispose()是如此重要。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App