小编Dav*_*bot的帖子

通用异步查询类

基于这篇精彩的CQRS文章,我定义了以下接口:

public interface IQuery<TResult>
{
}

public interface IQueryHandler<TQuery, TResult> where TQuery : IQuery<TResult>
{
    TResult Handle(TQuery query);
}
Run Code Online (Sandbox Code Playgroud)

实现通用异步QueryHandler的最佳方法是什么?到目前为止,我有一个新的接口定义来将Handle()方法更改为void并接受新的"Complete"事件处理程序.就像是:

public interface IQueryHandlerAsync<TQuery, TResult> where TQuery : IQuery<TResult>
{
    void Handle(TQuery query, RunWorkerCompletedEventHandler complete);
}
Run Code Online (Sandbox Code Playgroud)

我可以为实现IQueryHandlerAsync接口的所有查询处理程序创建新的具体类,例如:

public class FindUsersBySearchTextQueryHandlerAsync
    : IQueryHandlerAsync<FindUsersBySearchTextQuery, User[]>
{
    private readonly IQueryHandler<FindUsersBySearchTextQuery, User[]> queryHandler;

    public FindUsersBySearchTextQueryHandler(IQueryHandler<FindUsersBySearchTextQuery, User[]> queryHandler)
    {
        this.queryHandler = queryHandler;
    }

    public void Handle(FindUsersBySearchTextQuery query, RunWorkerCompletedEventHandler complete)
    {
        var worker = new BackgroundWorker();
        worker.DoWork += DoWork;
        worker.RunWorkerCompleted += complete; 
        worker.RunWorkerAsync(query);        
    }

    void …
Run Code Online (Sandbox Code Playgroud)

c# generics cqrs simple-injector

2
推荐指数
1
解决办法
725
查看次数

标签 统计

c# ×1

cqrs ×1

generics ×1

simple-injector ×1