如何使用Simple Injector注册嵌套泛型类型?

时间:2017-11-06 17:24:04

标签: c# dependency-injection ioc-container simple-injector mediatr

使用Mediatr,我有以下请求处理程序:

public class GetEntityByIdRequest<TEntity> : IRequest<TEntity> where TEntity : Entity
{
    public int Id { get; set; }

    internal class Handler : IRequestHandler<GetEntityByIdRequest<TEntity>, TEntity>
    {
        public TEntity Handle(GetEntityByIdRequest<TEntity> message)
        {
            return new Session.Query<TEntity>().FirstOrDefault(x => x.Id == message.Id);
        }
    }
}

我在IoC中注册此通用请求处理程序时遇到问题。我尝试过注册:

container.Register(typeof(IRequestHandler<,>), typeof(GetEntityByIdRequest<>));
container.Register(typeof(IRequestHandler<,>), typeof(GetEntityByIdRequest<Entity>));

这给了我错误:

  

System.ArgumentException:提供的类型GetEntityByIdRequest&lt; TEntity&gt;没有实现IRequestHandler&lt; TRequest,TResponse&gt;。参数名称:serviceType

我也看过this这与我遇到的问题相同,但是这个人正在使用StructureMap而不是Simple Injector。

有人可以帮我注册我的通用请求处理程序。

1 个答案:

答案 0 :(得分:2)

您正在将查询类型注册为处理程序。这显然不起作用。您将不得不注册处理程序:

container.Register(typeof(IRequestHandler<,>), typeof(GetEntityByIdRequest<>.Handler));
相关问题