使用部件编号在温莎城堡通用对象配置

2个问题于一身,但有很大关系。

是否有可能与温莎城堡解决一个配置项,例如 -

Assembly.Namespace.Object1`2 [[$ {ComponentId1}],[$ {ComponentId2}],大会

其中,ComponentId1和ComponentId2被定义为组件。 城堡温莎似乎并没有被解决的ComponentID,它只是寻找ComponentId1在Castle.Windsor组装。

第二个问题也发挥了作用,如果你不能做的第一个问题。 如果你有使用的ComponentID的完全组装的参考,而不是,你怎么能传递任何参数的对象被创建? 例如设置ComponentId1.Field1 =“嗒嗒”,或传递东西ComponentId1的构造

有意义的希望

更新 -

下面我拼凑下面的代码的要求 -

对象

public class Wrapper<T, T1> where T : ICollector where T1:IProcessor { private T _collector; private T1 _processor; public Wrapper(T collector, T1 processor) { _collector = collector; _processor = processor; } public void GetData() { _collector.CollectData(); _processor.ProcessData(); } } public class Collector1 : ICollector { public void CollectData() { Console.WriteLine("Collecting data from Collector1 ..."); } } public class Processor1 : IProcessor { public void ProcessData() { Console.WriteLine("Processing data from Processor1 ..."); } }

每种类型的对象的在实施例重复这样3

配置

<components> <component id="Collector1" service="CastleWindsorPlay.ICollector, CastleWindsorPlay" type="CastleWindsorPlay.Collector1, CastleWindsorPlay"/> <component id="Collector2" service="CastleWindsorPlay.ICollector, CastleWindsorPlay" type="CastleWindsorPlay.Collector2, CastleWindsorPlay"/> <component id="Collector3" service="CastleWindsorPlay.ICollector, CastleWindsorPlay" type="CastleWindsorPlay.Collector3, CastleWindsorPlay"/> <component id="Processor1" service="CastleWindsorPlay.IProcessor, CastleWindsorPlay" type="CastleWindsorPlay.Processor1, CastleWindsorPlay"/> <component id="Processor2" service="CastleWindsorPlay.IProcessor, CastleWindsorPlay" type="CastleWindsorPlay.Processor2, CastleWindsorPlay"/> <component id="Processor3" service="CastleWindsorPlay.IProcessor, CastleWindsorPlay" type="CastleWindsorPlay.Processor3, CastleWindsorPlay"/> <component id="Wrapper1" type="CastleWindsorPlay.Wrapper`2[[CastleWindsorPlay.Collector1, CastleWindsorPlay],[CastleWindsorPlay.Processor3, CastleWindsorPlay]], CastleWindsorPlay" /> </components>

实例化

var wrapper = (Wrapper<ICollector, IProcessor>) container.Resolve("Wrapper1"); wrapper.GetData();

这个简单的例子与错误,虽然此错误信息 -

无法创建组件'Wrapper1“,因为它有依存关系得到满足。 Wrapper1正在等待以下依赖性:

服务: - CastleWindsorPlay.Collector1这是没有注册。 - 这是未注册CastleWindsorPlay.Processor3。

关于这个奇怪的是,我可以把它单独调用包装之前解决Collector1和Processor3,但包装依然看不到他们。

这是一个基本的例子,接下来的事情我希望能够做的就是实例化的包装时,设置在收集器和/或处理器的属性。 因此,它可能是这样的Collector.Id = 10,但在包装中定义的配置设置。 设置对收集器组件的定义是行不通的,因为我会想能够实例每个收集器的多个副本,使用不同的ID的

更新2

什么实际上,我试图做的是有 -

<components> <component id="Wrapper1" type="CastleWindsorPlay.Wrapper`2[${Collector1}(id=1)],[${Processor3}]], CastleWindsorPlay" /> <component id="Wrapper2" type="CastleWindsorPlay.Wrapper`2[${Collector1}(id=3)],[${Processor3}]], CastleWindsorPlay" /> </components>

然后让另一个对象定义为

<component id="Manager" type="CastleWindsorPlay.Manager,CastleWindsorPlay"> <parameters> <wrappers> <array> <item>${Wrapper1}</item> <item>${Wrapper2}</item> </array> </wrappers> </parameters>

后来终于在代码只是能够打电话 -

var manager = (Manager)container.Resolve("Manager");

这将返回管理对象,与包装填充的数组,并配置了正确的收集器和转换器的包装。

我知道在这里的城堡配置错误,这就是为什么我问的问题,我不知道如何设置配置起来做什么,我以后,或者即使有可能做到这一点在温莎城堡

--------------解决方案-------------

UPDATE2

确定它开始变得有意义现在:)就像我说从一开始,它看起来像你正在寻找业务覆盖:

<components>
<component id="Wrapper1" type="CastleWindsorPlay.Wrapper`2[<<closing types go here>>]/>
<parameters>
<collector>${collector1WithId1}</collector>
<collector>${processor3WithId3}</collector>
</parameters>
</component>

<component id="Wrapper2" type="CastleWindsorPlay.Wrapper`2[<<closing types go here>>]/>
<parameters>
<collector>${collector1WithId5}</collector>
<collector>${processor3WithId8}</collector>
</parameters>
</component>
</components>

UPDATE

好了,感谢您的例子。 为什么你会得到错误的原因,就是因为你注册组件 Collector1 组件Processor3作为服务 ICollectorIProcessor分别。 您有没有服务Collector1Processor3因此,当温莎试图为他们提供,它无法找到他们,因此异常消息。

你需要为了这个工作,将其注册为相应的服务。


我不知道你想在这里做什么,但我相信你正在寻找的服务覆盖,并内嵌参数

分类:C# 时间:2012-01-01 人气:1
本文关键词: C#泛型,温莎城堡
分享到:

相关文章

  • 解决泛型与温莎城堡 2014-04-15

    我在使用解决温莎城堡2.5泛型接口/类的问题. 我有以下的类和接口: public interface IGenericDao<T> : IDao public abstract class GenericDao<T> : IGenericDao<T> where T:class, new() public class LocationDao : GenericDao<Location>, ILocationDao 对于注册我使用下面的代码行 c.Regis

  • 注册泛型类型和服务,温莎城堡的IoC 2012-08-28

    您好再次stackoverflowians, 我认为这是关于时间,我学会了如何使用DI框架. 我听说了很多关于温莎城堡的好东西,所以我决定去这一点. 现在有教程在那里如何使用它鱼米之乡,但是,我无法找到该怎么办时,泛型涉足很多有用的信息. 这是我的问题. 我有一个BaseDAO namespace Utilities.DataAccess { public class BaseDAO<T> : IBaseDAO<T> { public BaseDAO(IConnectionProv

  • 你如何使用温莎城堡 - 流畅的界面注册一个通用接口? 2012-12-28

    温莎城堡刚出来为注册组件,以替代在配置文件中使用XML提供了流畅的界面. 我如何使用这个流畅的界面注册一个通用的接口 ? 为了说明这一点,我有: public interface IFoo<T,U> { public T IToo(); public U ISeeU(); } 这是由一些所谓的Foo类实现的. 现在,如果我想注册这个,我做这样的事情? var _container = new WindsorContainer(); _container.Register(...); 如何在这个

  • 使用温莎城堡从一个具体的实施动态添加通用服务 2013-09-09

    我使用温莎城堡,和我有以下几点: public class NhibernateRepository<T> : IRepository<T> { public NHibernateRepository(...) { ... } } 我想用流利的温莎API要为每个我的域模型注册一个服务 也就是说,我想动态注册IRepository<Order> , IRepository<Customer> , IRepository<Article>等使用NHi

  • 温莎城堡升级导致TypeLoadException泛型类型 2014-11-18

    我在温莎城堡的XML文件下面的映射已经有一段时间效果不错(不变): <component id="defaultBasicRepository" service="MyApp.Models.Repositories.IBasicRepository`1, MyApp.Models" type="MyApp.Models.Repositories.Linq.BasicRepository`1, MyApp.Models" lifestyle=

  • 温莎城堡和自动注册 2012-01-01

    我是一个城堡的n00b,并正在使用的温莎城堡的良好API来自动注册实现基于命名约定服务(ISomething被执行的东西). 有一件事我想支持是自动注册拿起依存关系是在不同的dll文件,并自动注册的,也是如此. 所以:IFoo的是由富(均在Foo.dll)实现的,并富取决于IBAR,这是在Bar.dll. 我已经写了实际执行的自动注册下面的代码. 它似乎工作,但我不知道是否我没有太多的工作我自己. 有没有一种简单的方法来完成同样的事情? private static void EnsureReg

  • 如何温莎城堡应对它实现多个接口的类的? 2012-01-04

    比如我有两个接口:ICustomerService和IOrderService每个有几个像GetCustomer,GetOrder等功能 我想要一个类实现两个接口:服务器. 如何温莎城堡应对呢? 是否有可能摆在首位? 当我解决基于两个接口中的一个服务器对象,我会得到相同的对象? 当我有一个构造函数,在其参数的两个接口,会发生什么? 还会有构造一个对象. 假设生活方式是留给它的默认值:辛格尔顿. --------------解决方案------------- 你检查这个职位? 这里还 论坛发帖也对

  • 有没有在温莎城堡文档的PDF版本? 2012-01-04

    唯一的文档,我发现了城堡项目,我已经在这里发现了网上HTML文件格式的组件. 有谁知道什么是更脱机友好或可打印的(如PDF). 我有很长的火车上下班,我想放的东西在我的笔记本电脑. :-) --------------解决方案------------- 德克尔,我想知道对于许多基于Web的资源,同样的事情(不仅是温莎城堡). 离线使用. 我不知道是否有可能通过抓取网页上的链接创建Web Arcive文件(MHT)文件的工具. 我敢肯定,必须有一个在野外... 更新: 我用Google搜索,发现这

  • 温莎城堡:如何检索特定实例的代理? 2012-01-07

    我使用温莎城堡在我的项目. 一些注册的组件被截获. 因为组件是通过接口注册,温莎城堡创建界面代理(温莎城堡创建一个独立的类型,使用成分实现接口,并委托给真正的实现). 不幸的是,你不能执行该接口的实际实施中的方法,因为代理将被绕过. 有没有一种方法来获得它代表了真正的实现中真正落实代理的实例? 下面是什么,我想实现的一个例子. 我想永远拦截Get方法. 请不来替代的方式来重构这个样本,因为这不是我的生产代码,但只是一些发明了演示. public interface IProvider { boo

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.909 (s). 10 q(s)