2011-10-11 55 views
0

我希望能够做到这一点分享温莎城堡单一实例:跨多个组件

<component id="Component1" service="Foo.IFoo, Foo" type="Foo.Bar, Foo" lifestyle="singleton" /> 
<component id="Component2" service="Foo.IFoo, Foo" type="Foo.Bar, Foo" lifestyle="singleton" /> 

这样,当我这样做:

IFoo foo = m_container.Resolve<IFoo>("Component1"); 

或者这样:

IFoo foo = m_container.Resolve<IFoo>("Component2"); 

..我得到相同的单例实例,而不是每个组件的单独实例。

这可能吗?

谢谢。

+3

如果你只需要一个组件,为什么要注册两个组件? –

+0

在实际的代码中,组件名称是一个接口名称。我希望能够将ISomething映射到单例实例,并将ISomethingElse映射到同一个实例。 我必须在运行时关闭所有接口名称,所以我需要通过城堡配置查找共享实例。 – Michael

+0

我已经在不使用Castle的情况下解决了这个问题,但如果可能的话我想使用它。它用于缓存,其中N个接口解析为任何给定的缓存实例,因此我可能需要多个组件用于一个单例实例。 – Michael

回答

0

如果你所拥有的是运行时的接口“名称”你打算如何调用Windsor容器上的通用Resolve <>方法?如果你忠实地只想要的IFoo的一个单一实例无论comopnent“名称”,此后只登记一个作为一个独立的,并呼吁:

IFoo foo = m_container.Resolve<IFoo>(); 

如果你正在寻找有多个接口,返回你可以看看同一组件使用转发类型。