翻译 当使用依赖注入容器时,你首先要向容器中注册你的组件,Windsor使用installers(该类型实现IWindsorInstaller接口)来封装和隔离注册的逻辑,可以使用Configuration和FromAssembly来完成工作. Installers是实现了IWindsorInstaller接口的简单类型,只有一个Install方法,该方法接收container参数,该参数使用 fluent registration API方式来注册组件 public class Reposit…
初次尝试使用Castle Windsor实现依赖注入DI,或者叫做控制反转IOC. 参考: https://github.com/castleproject/Windsor/blob/master/docs/README.md http://terrylee.cnblogs.com/archive/2006/04/17/377018.html 依赖注入就是基于接口interface编程,而不是具体的类,实现松耦合,易于单元测试,将接口定义为服务,具体实现某一服务的类为组件. Windsor有一个…
注册多个组件 1.one-by-one注册组件可能是一项非常重复的工作,可以通过Classes或Types注册一组组件(你可以指定一些特定的特征) 三个步骤 注册多个类型通常采取以下结构 container.Register(Classes.FromThisAssembly() .InSameNamespaceAs<RootComponent>() .WithService.DefaultInterfaces() .LifestyleTransient()); 可以看成三个不同的步骤 1)选择…
1.在容器中注册一个类型 container.Register( Component.For<IMyService>() .ImplementedBy<MyServiceImpl>() ); 2.注册一个非默认的类型(non-default service) container.Register( Component.For<IMyService>() .ImplementedBy<MyServiceImpl>() ); 不用泛型 // Same resul…
当使用XML配置的时候,可能要给组件指定各种各样的依赖 1.简单的参数 参数名称不区分大小写 <component id="ping" type="Acme.Crm.Services.PingService, Acme.Crm"> <parameters> <pingServer>http://acme.org</pingServer> <pingInterval>00:00:30</pingInte…
当从xml引用installer的语法如下 <install type="Acme.Crm.Infrastructure.ServicesInstaller, Acme.Crm.Infrastructure"/> Windsor允许你省略一部分命名规则.如 <install type="Acme.Crm.Infrastructure.ServicesInstaller"/> 甚至可以省略命名空间.如 <install type=&quo…
应用程序中的很多组件都会依赖其他的服务组件,很多依赖一些不合法的组件或者容器中没有的组件,例如int类型.string类型.TimeSpan类型 Windsor支持以上的场景,注册API有DependsOn方法.该方法接收一个参数(由Dependency类的静态方法返回值提供) 1. 支持静态依赖 Dependency.OnValue var twitterApiKey = @"the key goes here"; container.Register( Component.For&…
所有的事件是实现IKernelEvents 接口,已容器的Kernel属性暴露出来 1. AddedAsChildKernel 当前的容器添加子容器或其他容器时触发 2. RemovedAsChildKernel 和上面相反 ComponentModel events 3. RegistrationCompleted 当注册完成时触发 4. ComponentRegistered 组件注册的时候触发 5. ComponentUnregistered 组件被移除的时候触发 6. Component…