Castle Windsor流利的注册问题

时间:2010-08-23 15:11:49

标签: castle-windsor

我有以下课程:public class MainView : IHandle<MessageOne>,
IHandle<MessageTwo>...

我想注册所有实现IHandle&lt;&gt;的至少一个封闭版本的类。与温莎城堡的流利注册接口,但它不起作用。 BasedOn(typeof(IHandleThe&lt;&gt;))没有选择正确的类型。我使用以下声明:

container.Register(AllTypes
                     .FromAssemblyNamed("MyAssembly")
                   //.If(t => t.Name.EndsWith("View")
                     .BasedOn(typeof(IHandleThe<>))
                     .Configure(registration => DoStuff())
                     .WithService.Base);

上面的代码没有进入Configure调用,但是当我对BasedOn行进行注释并取消注释If行时,它就可以工作了。但是If不是太有帮助。有没有人知道我做错了什么。

感谢任何想法/帮助

祝你好运 Gope

1 个答案:

答案 0 :(得分:0)

这是关于API的一个不太直观的事情。如果您查看at the documentation,您会发现Pick BasedOnWhere执行xor,因此上面的代码会注册两组类型:

  1. 名称以“查看”结尾的类型(使用默认配置,即作为单词)

  2. 基于IHandleThe<>的类型(在程序集中找到的所有类型,前面的条件不适用于此处)并将它们配置为基本服务,以及DoStuff方法所做的任何事情。

  3. 要实现您想要的(根据类型AND,如果名称以If结尾),BasedOn调用必须先进行,所有其他调用必须先进行。