【发布时间】:2018-09-07 08:17:01
【问题描述】:
我尝试使用 CQRS 创建应用程序并实现 QueryBus。有我的查询:通用查询和一个带有处理程序的特定查询
public interface IQuery<TResult> { }
public interface IQueryHandler<TQuery, TResult> where TQuery : IQuery<TResult>
{
TResult Execute(TQuery query);
}
public class PeriodPlanListQuery : IQuery<object> { }
public class PeriodPlanListQueryHandler : IQueryHandler<PeriodPlanListQuery, object>
{
public object Execute(PeriodPlanListQuery query)
{
return new { };
}
}
我使用温莎城堡来解决依赖关系
container.Register(
Component.For<IQueryHandler<PeriodPlanListQuery, object>>()
.ImplementedBy<PeriodPlanListQueryHandler>()
.LifestylePerWebRequest());
在我的 QueryBus 方法的实现中
public TResult Send<TResult>(IQuery<TResult> query)
{
var handler = _container.Resolve<IQueryHandler<IQuery<TResult>, TResult>>();
if (handler == null)
throw new NotSupportedException(query.GetType().FullName);
var result = handler.Execute(query);
return result;
}
我得到错误缺少组件,我的问题是我的 QueryBus 实现或在组件中注册有什么问题
没有支持服务的组件 Domain.IQueryHandler
2[[Domain.IQuery1[[System.Object, mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b77a5c561934e089]],JP.Planner.Domain,版本=1.0.0.0, Culture=neutral, PublicKeyToken=null],[System.Object, mscorlib, 版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089]] 找到了
【问题讨论】:
-
blog post 中给出了您问题的答案。看一下
QueryProcessor的实现以及它为何以这种方式实现的描述。
标签: c# generics castle-windsor cqrs