流利地选择要注入的组件

时间:2012-11-05 14:00:45

标签: castle-windsor

我有一些组件实现了相同的界面,我想选择哪一个注入我的Repository

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

我以为我使用了DependsOn,但现在我看到DependsOn用于静态依赖,例如字符串。 IHandlerSelector是前进的唯一途径吗?我宁愿将声明内联到组件注册。也许是工厂方法?有什么建议吗?

编辑 示例构造函数

public PersitentRepository(Func<ISession,string> sessionFactory)

挖掘我意识到委托是来自TypedFactoryFacility的工件。似乎有一些变化,所以它现在只按类型解析。在较旧的Castle版本中,字符串参数用于按名称选择组件。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

DependsOn确实可以用于静态以外的其他事情,问题是注入的委托不会解决以前的问题。我最终注册了自己的组件来处理这个特定的代表

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

(我从记忆中输入以上信息,请原谅任何错别字)