如何按照惯例将通用接口绑定到 Ninject 中的多个通用具体类型
本文关键字:类型 照惯例 何按 接口 绑定 Ninject | 更新日期: 2023-09-27 18:34:45
我有一个实现相同泛型接口的多对象。所以,我想使用 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>
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();
}