我有一些组件实现了相同的界面,我想选择哪一个注入我的Repository
。
Component.For<IRepository>().ImplementedBy<Repository>().<whatShouldGoHere>()
我以为我使用了DependsOn
,但现在我看到DependsOn
用于静态依赖,例如字符串。 IHandlerSelector
是前进的唯一途径吗?我宁愿将声明内联到组件注册。也许是工厂方法?有什么建议吗?
编辑 示例构造函数
public PersitentRepository(Func<ISession,string> sessionFactory)
挖掘我意识到委托是来自TypedFactoryFacility
的工件。似乎有一些变化,所以它现在只按类型解析。在较旧的Castle版本中,字符串参数用于按名称选择组件。
答案 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));
(我从记忆中输入以上信息,请原谅任何错别字)