C# LightInject不';无法解析继承的泛型类型

C# LightInject不';无法解析继承的泛型类型,c#,generics,mediator,light-inject,mediatr,C#,Generics,Mediator,Light Inject,Mediatr,我正在尝试使用LightInject和MediatR构建通用请求处理程序。基本上,我有如下类型: public class SomeType { } public class InheritedType : SomeType { } public class Handler : IAsyncRequestHandler<SomeType, SomeResponseType> { } 但是,当我尝试调用中介来实现IAsyncRequestHandler时,它失败了。我本来希望得到注册

我正在尝试使用LightInject和MediatR构建通用请求处理程序。基本上,我有如下类型:

public class SomeType { }
public class InheritedType : SomeType { }
public class Handler : IAsyncRequestHandler<SomeType, SomeResponseType> { }
但是,当我尝试调用中介来实现
IAsyncRequestHandler
时,它失败了。我本来希望得到注册的
处理程序
,因为
InheritedType
实现了
SomeType

我在这里做错了什么,或者在LightInject中是否有任何方法可以实现我上面描述的行为



如果不清楚,请告诉我,我可以尝试提供更多信息。谢谢

处理程序类关闭两个泛型参数,以后无法更改。 只需手动尝试创建处理程序类的新实例,您将看到无法指定泛型参数,因为它们已关闭

把你的代码改成这个

public class Handler<T, SomeResponseType> : IAsyncRequestHandler<T, SomeResponseType> where T:IAsyncRequest<SomeResponseType>
{
    public Task<SomeResponseType> Handle(T message)
    {
        throw new NotImplementedException();
    }
}
公共类处理程序:IAsyncRequestHandler其中T:IAsyncRequest
{
公共任务句柄(T消息)
{
抛出新的NotImplementedException();
}
}
像这样注册和解析

var container = new ServiceContainer();            
container.Register(typeof(IAsyncRequestHandler<,>), typeof(Handler<,>));
var instance = container.GetInstance<IAsyncRequestHandler<InheritedType, SomeResponseType>>();
var container=newservicecainer();
Register(typeof(IAsyncRequestHandler),typeof(Handler));
var instance=container.GetInstance();

我最终以一种不同的方式解决了这个问题,以避免额外的泛型层,但这是一个很好的信息,谢谢!谢谢你的图书馆!
var container = new ServiceContainer();            
container.Register(typeof(IAsyncRequestHandler<,>), typeof(Handler<,>));
var instance = container.GetInstance<IAsyncRequestHandler<InheritedType, SomeResponseType>>();