注册多个组件 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…
初次尝试使用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有一个…
翻译 当使用依赖注入容器时,你首先要向容器中注册你的组件,Windsor使用installers(该类型实现IWindsorInstaller接口)来封装和隔离注册的逻辑,可以使用Configuration和FromAssembly来完成工作. Installers是实现了IWindsorInstaller接口的简单类型,只有一个Install方法,该方法接收container参数,该参数使用 fluent registration API方式来注册组件 public class Reposit…
当使用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…
public class RequireLoggerProperties : IContributeComponentModelConstruction { public void ProcessModel(IKernel kernel, ComponentModel model) { model.Properties .Where(p => p.Dependency.TargetType == typeof(ILogger)) .All(p => p.Dependency.IsOptiona…
[CastleComponent("GenericRepository", typeof(IRepository<>), Lifestyle = LifestyleType.Transient)] public class Repository<T> : IRepository, IRepository<T> { // some implementation } container.Register(AllTypes.FromThisAssembly…
使用xml配置和fluent注册两种搭配使用需要注意的是: 如果先在WindsorContainer构造函数指明用xml配置进行注册,如下设置 IWindsorContainer container = new WindsorContainer("dependencies.config"); container.Register( Component.For.... ); 如果先用fluent注册,则如下设置 container.Register( Component.For....…
问题 在实际开发过程当中我们可能会针对某些类型使用动态代理技术(AOP),注入了一些拦截器进行处理,但是一旦某个类型被动态代理了,那么就会生成一个代理类.这个时候在该类内部使用 GetType() 方法获取到的 Type 类型并不是实际类型的 Type,而是代理类的 Type. 解决 那么我们如何在代理类当中获取到具体类型的 Type 呢?其实 Castle 给我们提供了一个工具类,叫做 ProxyUtil ,可以使用该工具类来获取到代理类所拦截的具体类型,下面的代码就是具体的使用方法. DEM…
平常用Inject比较多,今天接触到了Castle Windsor.本篇就来体验其在ASP.NET MVC中的应用过程. Visual Studio 2012创建一个ASP.NET MVC 4网站. 通过NuGet安装Castle Windsor. 在当前项目下创建一个名称为"IOC"的文件夹. 在ASP.NET MVC中,每次请求,DefaultControllerFactory都会为我们创建controller实例,我们需要自定义一个派生自DefaultControllerFact…
一.[转]ASP.NET MVC中使用Castle Windsor 二.[转]Castle Windsor之组件注册 平常用Inject比较多,今天接触到了Castle Windsor.本篇就来体验其在ASP.NET MVC中的应用过程. Visual Studio 2012创建一个ASP.NET MVC 4网站. 通过NuGet安装Castle Windsor. 在当前项目下创建一个名称为"IOC"的文件夹. 在ASP.NET MVC中,每次请求,DefaultControllerF…
原文地址: http://nexussharp.wordpress.com/2012/04/21/castle-windsor-avoid-memory-leaks-by-learning-the-underlying-mechanics/ CASTLE WINDSOR: AVOID MEMORY LEAKS BY LEARNING THE UNDERLYING MECHANICS Lifestyles In am not going to explain all the different l…
http://www.codeproject.com/Articles/1080517/Aspect-Oriented-Programming-using-Interceptors-wit Download sample application (or see the latest on Github) Contents Introduction What is Aspect Oriented Programming (AOP) and Method Interception? Manual W…
找过一些Windsor教程的文章,博客园上TerryLee有写了不少,以及codeproject等也有一些例子,但都讲的不太明了.今天看到Alex Henderson写的一个系列,非常简单明了.下面是主要的内容Part 1 - Simple configurationPart 2 - Array ConfigurationPart 3 - Dictionary configurationPart 4 - Switching configurationsPart 5 - Configuration…
一.Windsor的使用 Windsor的作为依赖注入的容器的一种,使用起来比较方便,我们直接在Nuget中添加Castle Windsor,将会自动引入Castle.Core 和 Castle.Windsor,就可以正常使用. 1.逐个组件进行注册 使用注册模块中的Component IWindsorContainer container = new WindsorContainer(); container.Register(Component.For<IAppleService>() /…
[转]Castle Windsor之组件注册 注册方式较多,大体有这么几种,学习得比较粗浅,先记录: 1.逐个注册组件 即对每个接口通过代码指定其实现类,代码: container.Register( Component.For<IMyService>() //接口 .ImplementedBy<MyService>() //实现类 ); 典型应用场景:例如定义了一个日志记录接口,放到一个独立程序集中.具体实现可能有多种方式(日志以文本文件/XML文件/数据库等不同方式存储),则可…
[转]Castle.Windsor依赖注入的高级应用_Castle.Windsor.3.1.0 1. 使用代码方式进行组件注册[依赖服务类] using System; using System.Collections.Generic; using System.Linq; using System.Text; using CastleDemo.Lib; using Castle.Windsor; using Castle.Windsor.Configuration.Interpreters;…
Castle最早在2003年诞生于Apache Avalon项目,目的是为了创建一个IOC(控制反转)框架.发展到现在已经有4个组件了,分别是ActiveRecord(ORM组件).Windsor(IOC组件).DynamicProxy(动态代理组件).MonoRail(Web MVC组件). 这里我们要学习的是Windsor组件,Windsor是Castle提供的一个IOC框架. 使用之前,首先需要引用两个DLL,分别是:Castle.Core 和 Castle.Windsor. IOC(控制…
1. 使用代码方式进行组件注册[依赖服务类] using System; using System.Collections.Generic; using System.Linq; using System.Text; using CastleDemo.Lib; using Castle.Windsor; using Castle.Windsor.Configuration.Interpreters; using Castle.MicroKernel.Registration; namespace…
Asp.Net Core 3.0以上,不再能通过修改Starup.ConfigureServices返回值(IServiceProvider),所以只能调用IHostBuilder.UseServiceProviderFactory修改最外层的IServiceProviderFactory,达到替换DI容器的目的. 流程是IHostBuilder.UseServiceProviderFactory->IHostBuilder.ConfigureServices->Starup.Configur…
依赖注入框架Castle Windsor从容器里解析一个实例时(也就是调用Resolve方法),是通过调用待解析对象的构造函数new一个对象并返回,那么问题是:它是调用哪个构造函数呢? 无参的构造函数 带参但参数不是靠依赖注入的构造函数 带参且参数是靠依赖注入的构造函数 有多个带参且参数是靠依赖注入的构造函数 带着这个问题,我写了一段测试代码. 测试1: 只有一个无参构造函数: CtorTest类(在控制台程序里用Windsor解析这个类) public class CtorTest { pub…
最近在研究ABP项目,有关ABP的介绍请看阳光铭睿 博客,ABP的DI和AOP框架用的是Castle Windsor下面就对Castle Windsor项目常用方法介绍和关于ABP的使用总结 1.下载Castle.Windsor所需要的dll,在程序包管理器控制台 运行Install-Package Castle.Windsor 下面先看个简单的例子 var container = new WindsorContainer(); container.Register( Component.For…
这篇博客要说的东西跟ABP,AutoMapper和Castle Windsor都有关系,而且也是我在项目中遇到的问题,最终解决了,现在的感受就是“痛并快乐着”. 首先,这篇博客不是讲什么新的知识点,而是一次实战项目的经验总结,其实更是一次弯路或者错误记录吧,方便现在或以后遇到同样问题的人. 下面开始总结. 先来说说我的功能需求: 我要在页面上显示设备所在的城市名称,但是设备实体类中对应的字段是CityId,也就是城市表所对应的Id主键,但是设备实体类所对应的Dto,映射链所对应的属性是City.…
过了几天,我又来了.上一篇中有博友提到要分享下属于我们abp初学者的历程,今天抽出点时间写写吧.起初,我是直接去看阳光铭睿的博客,看了一遍下来,感觉好多东西没接触过,接着我又去下了github 里面下了几个例子来看,看起来还是有点吃力,毕竟我只用过MVC3和asp.net4.0以及EntityFramework3.5 ,突然感觉自己好像跟世界脱轨了,什么IOC只是听老师提过,当时不知道有什么用就没怎么听,AutoMapper,AngularJS,Less什么的没听过.没办法,只好先去一个一个把他…
Castle是针对.NET平台的一个开源项目,从数据访问框架ORM到IOC容器,再到WEB层的MVC框架.AOP,基本包括了整个开发过程中的所有东西,为我们快速的构建企业级的应用程序提供了很好的服务.4月份以来,Terrylee写了一系列的Castle的文章,这里做一下总结,后续还有Facility系列等,本部分内容会不断的更新. 第一部分:ActiveRecord学习实践系列 1.Castle ActiveRecord学习实践(1):快速入门指南 2.Castle ActiveRecord学习…