首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Castle Windsor:如何从代码中指定构造函数参数?

在 Castle Windsor 中,您可以使用几种方法来从代码中指定构造函数参数:

  1. 使用 DependsOn 属性:

首先,在您的类中定义构造函数参数,并使用 DependsOn 属性将其与类关联。例如:

代码语言:csharp
复制

public class MyClass

{

代码语言:txt
复制
   private readonly string _parameter;
代码语言:txt
复制
   public MyClass(string parameter)
代码语言:txt
复制
   {
代码语言:txt
复制
       _parameter = parameter;
代码语言:txt
复制
   }

}

assembly: DependsOn(typeof(MyClass))

代码语言:txt
复制

然后,在您的安装程序类中,使用 Component.For<T>().Dependency 方法指定构造函数参数:

代码语言:csharp
复制

public class MyInstaller : IWindsorInstaller

{

代码语言:txt
复制
   public void Install(IWindsorContainer container, IConfigurationStore store)
代码语言:txt
复制
   {
代码语言:txt
复制
       container.Register(
代码语言:txt
复制
           Component.For<MyClass>().DependsOn(Parameter.ForKey("parameter").Eq("myValue"))
代码语言:txt
复制
       );
代码语言:txt
复制
   }

}

代码语言:txt
复制
  1. 使用 TypedFactoryFacility

首先,在您的类中定义构造函数参数,并使用 TypedFactoryFacility 创建工厂来生成类的实例。例如:

代码语言:csharp
复制

public interface IMyClassFactory

{

代码语言:txt
复制
   MyClass Create(string parameter);

}

public class MyClass

{

代码语言:txt
复制
   private readonly string _parameter;
代码语言:txt
复制
   public MyClass(string parameter)
代码语言:txt
复制
   {
代码语言:txt
复制
       _parameter = parameter;
代码语言:txt
复制
   }

}

public class MyInstaller : IWindsorInstaller

{

代码语言:txt
复制
   public void Install(IWindsorContainer container, IConfigurationStore store)
代码语言:txt
复制
   {
代码语言:txt
复制
       container.AddFacility<TypedFactoryFacility>();
代码语言:txt
复制
       container.Register(
代码语言:txt
复制
           Component.For<MyClass>().Named("myClass"),
代码语言:txt
复制
           Component.For<IMyClassFactory>().AsFactory()
代码语言:txt
复制
       );
代码语言:txt
复制
   }

}

代码语言:txt
复制

然后,在您的应用程序代码中使用工厂来创建 MyClass 的实例:

代码语言:csharp
复制

var myClassFactory = container.Resolve<IMyClassFactory>();

var myClass = myClassFactory.Create("myValue");

代码语言:txt
复制

这些方法允许您在 Castle Windsor 中指定构造函数参数,以便在创建类的实例时使用这些参数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

事件总线知多少(2)

类型绑定(元数据字符串匹配) 参数校验 安全校验 基于运行时 反射产生大量临时对象,增加GC负担 那既然反射有性能瓶颈,我们该如何是好呢?...下面我们就以Castle Windsor作为我们的IOC容器为例,来讲解下如何解除依赖。 4.1....了解Castle Windsor 使用Castle Windsor主要包含以下几步: 初始化容器:var container = new WindsorContainer(); 使用WindsorInstallers...初始化容器 要在EventBus这个类完成事件依赖的注入和解析,就需要在本类持有一个对IWindsorContainer的引用。 可以直接定义一个只读属性,并在构造函数中进行初始化即可。...因为Castle Windsor在3.0版本取消了UnRegister方法,所以在进行事件注册时,就不再手动卸载IOC容器已注册的依赖。

1.1K70

【Groovy】Groovy 方法调用 ( Groovy 构造函数为成员赋值 | Groovy 函数参数传递与键值对参数 | 完整代码示例 )

文章目录 一、Groovy 构造函数为成员赋值 二、Groovy 函数参数传递与键值对参数 三、完整代码示例 一、Groovy 构造函数为成员赋值 ---- Groovy 类没有定义构造函数 ,...但是可以使用如下形式的构造函数 , 为 Groovy 类设置初始值 ; new 类名(成员名1: 成员值1, 成员名2: 成员值2) 顺序随意 : 成员的顺序随意 , 没有强制要求 , 只需要 成员名...---- 在 Groovy 的构造函数 , 可以使用 成员名1: 成员值1, 成员名2: 成员值2 类型的参数 , 这是键值对 map 类型的集合 ; 但是对于普通的函数 , 不能使用上述格式 ,...如果出现 变量名1: 变量值1, 变量名2: 变量值2 样式的代码 , 会将上述参数识别为一个 map 集合 ; 定义了一个 Groovy 类 , 其中定义的方法接收 2 个参数 ; class Student...; 必须使用如下形式 , 才能正确执行 printValue 函数 ; // 传入的 a: "Tom", b: 18 是第一个参数 , 这是一个 map 集合 // 第二个参数是 "Jerry" 字符串

9.1K20

如何使用FindFunc在IDA Pro寻找包含指定代码模式的函数代码

关于FindFunc  FindFunc是一款功能强大的IDA Pro插件,可以帮助广大研究人员轻松查找包含了特定程序集、代码字节模式、特定命名、字符串或符合其他各种约束条件的代码函数。...简而言之,FindFunc的主要目的就是在二进制文件寻找已知函数。  使用规则过滤  FindFunc的主要功能是让用户指定IDA Pro代码函数必须满足的一组“规则”或约束。...FindFunc随后将查找并列出满足所有规则的所有函数。...FindFunc会以智能化的形式对规则进行计划和排序,功能概述如下: 1、目前有六条规则可用; 2、代码匹配考虑寻址大小前缀和操作数大小前缀; 3、函数识别模块; 4、性能规则的智能调度; 5、以简单ASCII...广大研究人员可以直接使用下列命令将该项目源码克隆至本地: git clone https://github.com/FelixBer/FindFunc.git 接下来,将项目中的findfuncmain.py文件拷贝到IDA Pro的插件目录即可

4K30

【C#】使用 Castle 实现 AOP,以及 Autofac 集成 Castle

发展到现在已经有四个组件: ORM组件:ActiveRecord IOC组件:Windsor 动态代理组件:DynamicProxy Web MVC组件:MonoRail 本文主要介绍 动态代理组件 Castle.DynamicProxy...动态代理只对公共接口方法、类的虚方法生效,因为只有接口中的方法、类的虚方法才可以在子类重写。...generator.CreateClassProxyWithTarget(new ProductRepository(), loggerIntercept); // 使用 CreateClassProxy 泛型方法可以省去实例化代码...异步函数拦截 Castle.DynamicProxy 对异步函数的拦截跟同步没啥差别,只是,如果要在方法执行完成后插入内容,需要 await public class ProductRepository...Castle.Core.AsyncInterceptor ,IAsyncInterceptor 接口并不集成 IInterceptor 接口,而 Autofac.Extras.DynamicProxy

1.1K30

一个简单的小程序演示Unity的三种依赖注入方式

为了展示Unity如何实现几种典型的注入方式(构造器注入、属性注入和方法注入),我写了一个简单的小程序。...在类型A定义了3个属性B、C和D,其类型分别为接口IB、IC和ID。...构造器注入(Constructor Injection):IoC容器会智能地选择选择和调用适合的构造函数以创建依赖的对象。...如果被选择的构造函数具有相应的参数,IoC容器在调用构造函数之前会自定义创建相应参数对象; 属性注入(Property Injection):如果需要使用到被依赖对象的某个属性,在被依赖对象被创建之后...在开源社区,具有很有流行的IoC框架,比如Castle Windsor、Unity、Spring.NET、StructureMap、Ninject等。

1.7K70

依赖注入容器Autofac

在.NET上现在存在许多的依赖注入容器, 我也在实践中使用过Castle Windsor、StructureMap、Autofac 、Unity。...Autofac的主要特性如下: 灵活的组件实例化:Autofac支持自动装配,给定的组件类型Autofac自动选择使用构造函数注入或者属性注入,Autofac还可以基于lambda表达式创建实例,这使得容器非常灵活...细粒度的组件生命周期管理:应用程序通常可以存在一个应用程序范围的容器实例,在应用程序还存在大量的一个请求的范围的对象,例如一个HTTP请求,一个IIS工作者线程或者用户的会话结束时结束。...灵活的模块化系统:通过模块化组织你的程序,应用程序不用纠缠于复杂的XML配置系统或者是配置参数。...自动装配:可以是用lambda表达式注册你的组件,autofac会根据需要选择构造函数或者属性注入 XML配置文件的支持:XML配置文件过度使用时很丑陋,但是在发布的时候通常非常有用 组件的多服务支持:

1.2K90

轻量级Golang IoC容器——iocgo

2. iocgo如何使用2.1 iocgo包的安装现在go官方版本已经出到1.17了,当然我在代码其实也没有用什么新版本的新特性,于是就用1.15版本或者之后的Go版本即可。...DependsOn 这个主要是指定构造函数的某个参数在通过容器获得对应的实例时,应该通过哪个Name去获得对应的实例。...Parameters 这个主要用于指定构造函数的某些非容器托管的参数,比如某构造函数中有int,string等参数,而这些参数的实例是不需要通过ioc容器进行映射托管的,那么就在这里直接指定。...Arguments 指定在调用对应的构造函数获得实例时,传递的参数,比如int,string等类型的不在ioc容器托管的参数,可以在这里指定。...,目前提供了2个选项:CallArguments 指定函数某个参数的值CallDependsOn 指定函数某个参数在通过ioc容器获得实例时使用哪个name来获得实例。

74020

Asp.Net Web API 2第十一课——在Web API中使用Dependency Resolver

如果要使用IProductRepository的不同实例,我们将需要在ProductRepository改变代码。...在Dependency injection,对象是不会负责创建自己的依赖项的。相反,当你创建一个对象,注入这个依赖的时候是通过构造函数参数或者setter方法。...这个框架也只能通过调用无参数构造函数来创建你的控制器。 就在这个时候dependency resolver来了。...一个简单的dependency resolver  下面的代码展示了一个简单的dependency resolver。这个代码主要只是展示了在Web API依赖注入如何工作的。...如果你使用一个Ioc容器,你不需要在代码中直接连同对象,几个开源的.Net Ioc容器是可以利用的,例如Autofac, Castle Windsor, Ninject, Spring.NET, StructureMap

70440

支持Visual Studio 2008和.NET 3.5的企业类库4.0

企业类库4.0(EntLib 4)发布了,采用的是Microsoft Public License (Ms-PL)协议发布,和之前的版本的相比较更开放,微软的各项共享源代码方面的协议介绍可参看Microsoft...1、也许你还不知道Unity是微软的模式与实践团队开发的轻量级,可扩展的依赖注入容器,支持依赖注入的构造函数注入,属性注入,还支持方法调用注入。...如果你有使用其他的IOC容器的经验,例如Castle Windsor, SpringFramework.NET, StructureMap等。...2、支持WMI2.0,EntLib 4,所有的应用代码块的主要工作类型都有自己独立的WMI类型对象,运行监控机制可以用类似SQL语句的方式直接检索运行组件的性能计数或配置属性情况,企业应用运营监控是一项非常重要的工作

89090

ASP.NET Core appsettings.json文件(9)《从零开始学ASP.NET CORE MVC》:

依赖注入是可选的,要配置它,我们必须使用像Ninject,autofac、castle windsor等第三方框架。...ASP.NET Core IConfiguration 服务 IConfiguration 服务是为了asp.net Core 的所有各种配置源读取配置信息而设计的。...如果在多个配置源具有相同密钥名称的配置设置,简单来说就是重名了,则后面的配置源将覆盖先前的配置源 。 几个地方的演示,分别是如何替换的。...{Environment}.json 用户机密 环境变量 5.命令行参数 如果您想要改变他们的调用顺序,甚至往里面添加属于自己的自定义配置信息,我们将在后面的课程讨论如何自定义配置源。...小结 所以翻源代码也没有那么可怕嘛 /// /// Initializes a new instance of the <see cref="WebHostBuilder

1.3K20

通过自定义ServiceHost实现对WCF的扩展

如果被选择的构造函数具有相应的参数,IoC容器在调用构造函数之前会自定义创建相应参数对象; 属性注入(Property Injection):如果需要使用到被依赖对象的某个属性,在被依赖对象被创建之后...在构造函数指定连个参数:实现了IUnityContainer接口的Unity容器对象和服务契约类型。...UnityServiceBehaviorAttribute的所有定义体现在如下所示的代码片断构造函数具有一个字符串类型的参数containerName表示配置的Unity容器的名称。...在构造函数,除了指定服务类型和可选的基地址数组之外,我们还指定了Unity容器的配置名称。...而通过上面的介绍我们知道最终作为构造函数参数的来源是.svc文件%@ServiceHost%指令的Service属性。

86780

VUE+WebPack游戏设计:实现子弹发射击打外星人效果

本节将要实现的游戏效果是,当用户在页面上拖拽了一个炮台后,炮台会自动发射出子弹,当飞跃的子弹打中外星人时,外星人就会页面上消失,本节代码完成后效果如下: 我们看看代入如何实现。...图片中发射子弹的炮台是我们以前实现的castle对象,我们要把所有的castle对象加入到一个列表,这样我们才能知道有多少炮台要发射子弹,所以代码修改如下: castle () { var...,该函数轮询castleList数组,从中取出炮台对象,增加炮台对象的tick计数器,一旦计数器达到指定值时,它会调用summonBullet函数创建子弹对象,然后该函数又会轮询子弹对象数组,然后调用blletTick...9 castleList: [] } } 接着我们要在主轮询函数添加代码,驱动上面代码的调用,在boardTick函数增加如下代码: boardTick () { .......此时代码调用enemyDamage函数计算外星人被击中后会掉多少血,如果外星人的能力耗尽,那么if(enemyHit.hp <=0)部分的代码会被执行,于是外星人对象就会页面上被删除。

45930

Asp.net mvc 知多少(十)

DI 是一种软件设计模式,用来允许我们开发松耦合代码。DI是一种很好的方式去减少软件模块之间的紧耦合关心。DI帮助更好的去管理软件的功能更新和复杂度。DI的目的是让代码可维护。...依赖注入模式使用构造器对对象初始化并提供需要的依赖给对象,也就意味着允许你类外部注入一个依赖项。...主要有以下三种方式: ** Constructor Injection (构造函数注入)** 这是最常用的注入方式。当实例化类的时候通过给类的构造函数提供依赖项来实现依赖注入。...这种方式不需要增加或修改构造函数。...列举如下: Castle Windsor 基于 Castle MicroKernel 详细的文档 使用者多 Understands Decorator(理解装饰器) Typed factories(类型工厂

1.2K100

使用ASP.NET实现Model View Presenter(MVP)

下一行代码创建了一个Presenter的对象实例,通过它的构造函数传递了一个实现ICurrentTimeView接口的对象,这样,Presenter现在能够操作View,类图中可以看出,Presenter...l 后置代码必须创建一个Presenter对象,并把自己传递给它的构造函数 l 创建好Persenter对象后,需要调用InitView() ASPX 页面: <asp:Label id="lblCurrentTime...后置<em>代码</em>必须创建一个Presenter对象,并把用户控件传递给它的<em>构造</em><em>函数</em> 3....在ASPX页面的后置<em>代码</em>的Page_Load事件,Presenter创建了一个实例,用户控件作为<em>参数</em>通过<em>构造</em><em>函数</em>传递给Presenter,到此为止,所有的描述的内容都和“使用用户控件封装Views”的一样..." target=_blank>Castle Windsor project.

1.1K80

VUE+WebPack前端游戏设计:实现物体的拖拽动态特效

上一节,我们介绍了太空版植物大战僵尸游戏的整体情况,并详解了如何建立游戏的基本框架,本节我们实现游戏中,道具的动态拖动特效,完成本节代码后,大家可以实现以下效果: 玩家先在底部的按钮中选择点击某个按钮...createjs库创建一个图片容器,接下来的几个函数satellite(),satellite2(),castle(),castle2(),spacejunk()分别从assetsLib函数调用相关接口...例如在satellite()函数,它会资源库创建一个卫星素材资源,并把它添加到building()函数返回的资源容器,它创建的图片素材如下: 也就是说,代码语句new this.assetsLib.Satellite...,根据输入参数buildingClass,创建相应的道具图片素材对象,然后根据传入的row,col两个参数,调用前面说过的两个坐标转换函数,确定道具图片要显示的网格,然后把图片显示到页面的指定位置。...最后我们看看代码如何处理用户点击底部按钮,相应的处理代码如下: addButtonOnMouseDown (e) { if (this.cjs.Ticker.getPaused()) {

96930

Dora.Interception: 一个为.NET Core度身定制的AOP框架

之前经常Review别人的代码,一看到这样的程序,我就会想如何将这些重复的代码写在一个地方,然后采用“注入”的方式将它们放到需要的程序。我们知道AOP是解决这类问题最理想的方案。...Interceptor类型必须具有一个公共构造函数,并且该构造函数的第一个参数的类型必须是InterceptDelegate,后者代表的委托对象会帮助我们调用后一个Interceptor或者目标方法(如果当前...上述这个构造函数可以包含任意的参数(比如CacheInterceptor构造函数的cache和optionsAccessor)。...如果创建目标Interceptor而调用的构造函数参数尚未采用Dependency Injection的形式注册,我们需要在这个方法中提供。...如下面的代码片段所示,我们在调用Use方法的时候就需要显式指定这个策略名称。

68360
领券