我有以下课程: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
答案 0 :(得分:0)
这是关于API的一个不太直观的事情。如果您查看at the documentation,您会发现Pick
BasedOn
和Where
执行xor,因此上面的代码会注册两组类型:
名称以“查看”结尾的类型(使用默认配置,即作为单词)
基于IHandleThe<>
的类型(在程序集中找到的所有类型,前面的条件不适用于此处)并将它们配置为基本服务,以及DoStuff方法所做的任何事情。
要实现您想要的(根据类型AND,如果名称以If结尾),BasedOn
调用必须先进行,所有其他调用必须先进行。