Castle Windsor之入门

C# 依赖注入 Castle.Windsor 依赖注入工具 Castle.Windsor 的简单应用 Castle Windsor 是适用于.NET 的成熟的 IOC 容器 样例01 创建接口 IDependency1 namespace ConsoleApp2 { public interface IDependency1 { object SomeObject { get; set; } } }... 阅读详情
1、为什么需要IOC
没有IOC的时候,代码是这样写的:
IMyService service = new MyService();

其中MyService实现了接口IService。
弊端是,接口和实现没有分离(直接引用了MyService)

用IOC,是类似这样的:
IService service = container.Resolve<IService>();


其中container是IOC容器,它负责(通过配置文件或程序集反射)来查找和实例化接口的对应实现类,做到接口和实现分离(不再引用实现类)


2、Castle Windsor
Castle Windsor是IOC之一,官网: http://www.castleproject.org/。其它著名的IOC还有Spring.Net(Spring的.Net版本)等。
Castle Windsor和Spring的较大差别是,前者更倾向于尽可能少的配置,而后者一般是基于配置文件的(虽然也可以无需配置文件)

3、获取接口实现类的实例对象
如下代码是获取接口IService的实现类的实例对象:
IMyService service = container.Resolve<IMyService>();

代码相当简洁。

如果实现类的构造函数有参数,则可以调用对应的重载方法,传入参数(不太推荐这种方式):
IMyService service = Resolve<IMyService>(IDictionary arguments);

如果IService接口有多个实现,也可以调用ResolveAll方法返回数组:
IMyService[] services = container..ResolveAll<IMyService>();


4、Castle Windsor初始化
也就是要拿到上文中的container,以便执行Resolve()方法。拿到container很容易:
IWindsorContainer container = new WindsorContainer();

关键是必须在container中注册组件,也就是为每个接口和实现类进行配对,这样Windsor才知道执行.Resolve<IService>()的时候应该去对哪个类执行new XXX();
container.Register(
    Component.For<IMyService>() //接口
	.ImplementedBy<MyService>() //实现类
);


这样就为Windsor注册了接口IMyService和对应的实现类MyServiceImpl,当调用container.Resolve<IMyService>()时,Windsor就知道应该在内部执行return new MyService();


5、问题:

既然我们的目标是接口和实现分离,才引入Castle Windsor,结果注册的时候,又引用了实现类,这不是又回到原点了?

答案是否定的。步骤4只是演示了如何逐接口进行注册,实际上Windsor还有很多注册方式,下文介绍。

.NET IOC 框架 —— Castle Windsor配置 一. 常见的IOC框架为Castle Windsor和Spring .Net,只不过后者注入比较依赖配置文件 阅读详情

相关推荐

Castle学习系列(九)---Windsor框架快速入门

Windsor是Castle提供的一个IOC框架,使用非常简单,支持批量注册。开始快速入门         首先引用dll   两个dll版本均是最新的3.3.0.0 新建两个接口文件IPrinter(打印接口)和ICharge(收费接口) public interface IPrinter { void RegPrint(int regID);

Eye_cng的专栏 5862

Castle Windsor 注册用法

Castle.Windsor 是一套IOC框架,下面主要讲解怎么去进行注册 使用 IWindsorInstaller // application starts var container = new WindsorContainer();//adds and configures all components using WindsorInstallers form executing asse

快乐小斗车 1957

Castle框架简易入门教程

Castle Project是一个提供给.NET开发者用于简化企业级开发的开源框架集合,包含多个子项目,如Castle Windsor、Castle ActiveRecord等。它是由一群经验丰富的开发者维护的,旨在帮助开发者构建高质量、可维护和可扩展的软件。

weixin_33375360的博客 1175

Castle Windsor

Windsor是Castle 的一个IOC容器。它构建于MicroKernel之上,功能非常之强大,能检测类并了解使用这些类时需要什么参数,检测类型和类型之间工作依赖性,并提供服务(requirements )或者发生错误时提供预警的机制(fail fast )。MicroKernel仅仅是提供了一个IOC的容器,非常的轻巧,它只依赖于Castle.Model一个程序集,但它的可扩展能力却很强,后

瞧字不识 5865

LabVIEW机器视觉通用软件

LabVIEW 通用视觉一款仿C模式的思想与方法 全网最精简零基础+通用视觉全套视频教程 只想把LabVIEW当作一种兴趣,结果却当成了职业 http://t.elecfans.com/c1181.html 本次(开源 )针对有一定视觉基础或项目开发经验的工程师量身打造视觉通用性系统(完全仿面向对象的原理),相对于一般的非标框架更具功能性,有效的解决复杂项目开发过程中的思路瓶颈。 LabVIEW通用视觉系统:通用软件可快速解决大部分简单的视觉开发项目,帮助众多软件工程师解决在非标视觉软件开发中的繁琐过程问

qq_21516871的博客 4609

GD-Link离线烧录全攻略:从配置到一键下载的保姆级教程

本文详细介绍了GD-Link离线烧录的全流程,从硬件准备到软件配置,再到一键下载的实战技巧。通过保姆级教程,帮助工程师快速掌握国产MCU的离线烧录技术,适用于产线批量烧录和现场设备维护等场景,显著提升工作效率。

ww90123的博客 649

.NET中三种AOP实现方式:Remoting、Castle、Autofac

.NET中三种AOP实现方式前言基本概念AOPIOC和DI实现方式动态代理:静态代理:Remoting实现方式Castle实现方式依赖注入的实现添加拦截器完整代码Autofac实现方式依赖注入的实现添加拦截器完整代码后记 前言 一直忙于撸码,难得有时间,研究了下AOP,与大家分享一下,也便于以后查看。( ̄▽ ̄)~* 因为.NET CORE中集成的IOC容器是Castle,日常大家常用的是Autof...

逍遥小丿年的博客 5030

双向全桥隔离DC-DC变换器(DAB)的调制优化与挑战解析

本文深入解析了双向全桥隔离DC-DC变换器(DAB)的核心调制技术及其面临的挑战。文章从基础的相移调制(SPS)入手,逐步探讨了扩展相移(EPS)、双重相移(DPS)等进阶策略,并重点分析了电流优化与零电压开通(ZVS)等硬核优化技巧。针对DAB在实际应用中存在的建模困难、多模块并联及数字实现等挑战,提供了实用的应对策略与设计思路,旨在帮助工程师在性能、复杂度与成本之间找到最佳平衡。

weixin_29271053的博客 570

Castle windsor快速入门

1.创建MVC项目,安装Castle Windsor 2.创建CastleWindsor文件夹     在ASP.NET MVC中,每次请求,DefaultControllerFactory都会为我们创建controller实例,我们需要自定义一个派生自DefaultControllerFactory的类,让Castle Windsor帮我们生成controller实例。创建WindsorCo

zhulongxi的博客 7657

域适应分类:MCD论文笔记——Maximum Classifier Discrepancy for Unsupervised Domain Adaptation

域适应分类:MCD论文笔记——Maximum Classifier Discrepancy for Unsupervised Domain Adaptation

qq_50001789的博客 1005

2024年游戏策划最新面试题及答案

1. **游戏策划**:负责游戏设计和开发的创意和技术过程。2. **主要职责**:设计游戏玩法、故事、角色、世界等。4. **游戏机制**:定义玩家如何与游戏世界互动的规则。13. **引人入胜的角色**:深入的背景故事、个性特征。3. **游戏平衡**:确保游戏公平、有趣且具有挑战性。7. **RPG特点**:角色发展、故事驱动、玩家选择。12. **关卡设计技巧**:挑战性、流动性、视觉引导。11. **游戏关卡设计**:创建游戏世界的不同阶段。5. **游戏循环**:玩家在游戏中重复的行为模式。

guo162308的博客 2319

Castle:Windsor Container入门级教程(翻译六)

原文连接:http://www.castleproject.org/container/gettingstarted/part1/index.html来自官方的一个入门教程。写了一下简单的翻译。也作为是自己学习castle的记录吧。 IMHO: In My Humble Opinion 恕我直言。 这个缩写是这次翻译所学到的。^_^ 在这个快速入门部分,将向你介绍一些Wi...

dilanshan0606的博客 503

【PostgreSQL】PostgreSQL数据库函数比对模板(PG通用)

LOOKUP 函数从单行或单列区域 (区域:工作表上的两个或多个单元格。区域中的单元格可以相邻或不相邻。)或数组 (数组:用于建立可生成多个结果或可对在行和列中排列的一组参数进行运算的单个公式。数组区域共用一个公式;数组常量是用作参数的一组常量。LOOKUP 函数具有两种语法形式:向量形式和数组形式。vlookup查找匹配值超过255个字符显示#Value的解决办法。如果值为错误值 #N/A,则返回 TRUE。

tttzzzqqq2018的博客 1493

Castle IOC容器快速入门

摘要:IOC模式是近年来非常流行的一种模式,相信大家都不陌生了,如果你还不是很熟悉的话,可以看看Martin Fowler大师的文章[url]http://martinfowler.com/articles/injection.html[/url],网上可以下载到中文版本。在Castle中,Windsor就是它的一个IOC容器,它构建于MicroKer...

weixin_34153893的博客 99

YOLOv10改进策略【模型轻量化】| MoblieNetV3:基于搜索技术和新颖架构设计的轻量型网络模型

本文记录的是基于MobileNet V3的YOLOv10目标检测轻量化改进方法研究。的模型结构是通过得来的,其中的基础模块结合了的深度可分离卷积、的线性瓶颈和倒置残差结构以及MnasNet中基于挤压和激励的轻量级注意力模块,使模型在性能、效率和灵活性方面都具有显著的优势。本文在替换骨干网络中配置了原论文中的small和large2种模型,以满足不同的需求。

Limiiiing的博客 513

NVIDIA Jetson之远程控制软件NoMachine安装使用

参考:https://www.bilibili.com/video/BV1cg4y1i776?t=12 0 背景

ZONGXP的博客 1万+

依赖注入容器 Castle windsor的使用

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34216196的博客 425

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Castle IOC容器快速入门(一)

摘要:IOC模式是近年来非常流行的一种模式,相信大家都不陌生了,如果你还不是很熟悉的话,可以看看Martin Fowler大师的文章http://martinfowler.com/articles/injection.html,网上可以下载到中文版本。在Castle中,Windsor就是它的一个IOC容器,它构建于MicroKernel之上,功能非常强大。本文将通过一个简单的例子来带你快...

aao84421的博客 148

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

castle 学习 (转载)

简单的Castle Windsor 2 示例 第一步:添加引用 Castle.Core Castle.DynamicProxy2 Castle.MicroKernel Castle.Windsor第二步:代码 using System;using System.Collections.Generic;using System.Linq;using System.Windo...

weixin_30438813的博客 134

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: Quartz的misfire
下一篇: Castle Windsor之组件注册
SpbDev
博客等级 码龄22年 6粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值