1

我有一些组件实现了相同的接口,我想选择哪一个被注入到我的Repository.

 Component.For<IRepository>().ImplementedBy<Repository>().<whatShouldGoHere>()

我以为我可以使用它,DependsOn但现在我看到它DependsOn用于静态依赖项,例如字符串。是IHandlerSelector唯一的出路吗?我宁愿声明与组件注册一致。也许是工厂方法?有什么建议吗?

编辑示例构造函数

public PersitentRepository(Func<ISession,string> sessionFactory)

挖掘了一下,我意识到委托是来自TypedFactoryFacility. 似乎发生了一些变化,因此现在仅按类型解析。在较早的 Castle 版本中,字符串参数用于按名称选择组件。

4

2 回答 2

2

一家工厂会成功的。

您需要将其添加FactorySupportFacility到您的容器中才能正常工作。

有关更多详细信息,请参阅位于http://docs.castleproject.org/Default.aspx?Page=Factory-Support-Facility&NS=Windsor&AspxAutoDetectCookieSupport=1的 Castle Windsor 文档。

另请参阅http://www.mail-archive.com/castle-project-users@googlegroups.com/msg04463.html

于 2012-11-05T14:03:23.073 回答
0

DependsOn 确实适用于静态以外的其他事情,问题是注入的委托没有解决它过去的方式。我最终注册了自己的组件来处理这个特定的委托

container.Register(Component.for<Func<ISession,string>>().ImplementedBy(sessionName => container.resolve<ISession>(sessionName));

(以上是凭记忆打出来的,如有错别字还请见谅)

于 2012-11-07T06:52:45.283 回答