我想知道如何按照惯例注册我的查询处理程序,具体来说,我有3种界面类型
IQuery
IQueryResult
IQueryHandler<IQuery, IQueryResult>
和具体类型看起来像
ArticlesQuery : IQuery
ArticlesQueryResult : IQueryResult
ArticlesQueryHandler : IQueryHandler<ArticlesQuery, ArticlesQueryResult>
随着后一类型的注册数量不断增加,我希望按照惯例注册这些注册,但似乎没有简单的方法可以做到这一点。
单个映射看起来像这样
container.RegisterType<IQueryHandler<ArticlesQuery, ArticlesQueryResult>,
ArticlesQueryHandler>();
按照惯例注册我尝试了
的内容container.RegisterTypes(AllClasses.FromLoadedAssemblies()
.Where(t => typeof (IQueryHandler<,>).IsAssignableFrom(t)), WithMappings.FromAllInterfaces);
但是失败了(没有发现任何类型也没有注册)。有什么想法吗?
答案 0 :(得分:1)
试试这个:
container.RegisterTypes(
AllClasses
.FromLoadedAssemblies()
.Where(t =>
t.GetInterfaces().Any(i =>
i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IQueryHandler<,>))),
WithMappings.FromAllInterfaces);
顺便说一句,IQueryHandler<,>
不能从任何类型分配,因为它是一个开放的泛型类型。