我有一个实现相同通用接口的多个对象。所以,我想使用Ninject约定配置它,但我不知道该怎么做。
现在我有这些注册
Bind<IQueryHandler<GetPagedPostsQuery, PagedResult<Post>>>().To<GetPagedPostsQueryHandler>();
Bind<IQueryHandler<GetPostByDateQuery, Post>>().To<GetPostByDateQueryHandler>();
我尝试过这个惯例
Kernel.Bind(x => x
.FromThisAssembly()
.IncludingNonePublicTypes()
.SelectAllClasses()
.InheritedFrom(typeof(IQueryHandler<,>))
.BindDefaultInterface());
但是没有注册任何查询处理程序。
可以用惯例来做吗?
**编辑** 课程如下
public class GetPagedPostsQueryHandler : IQueryHandler<GetPagedPostsQuery, PagedResult<Post>>
public class GetPostByDateQueryHandler : IQueryHandler<GetPostByDateQuery, Post>
答案 0 :(得分:1)
BindDefaultInterface
表示MyService : IMyService, IWhatever
将绑定到IMyService
。
你应该使用BindSingleInterface
,当我在单元测试中尝试时它会立即起作用:
[TestMethod]
public void TestMethod2()
{
var kernel = new StandardKernel();
kernel.Bind(c => c.FromThisAssembly()
.IncludingNonePublicTypes()
.SelectAllClasses()
.InheritedFrom(typeof(IQueryHandler<,>))
.BindSingleInterface());
kernel.TryGet<IQueryHandler<GetPagedPostsQuery,PagedResult<Post>>>()
.Should()
.NotBeNull();
}