LightInject 不解析继承的泛型类型

LightInject doesn't resolve inherited generic types

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

public class SomeType { }
public class InheritedType : SomeType { }
public class Handler : IAsyncRequestHandler<SomeType, SomeResponseType> { }

并且我已经将 Handler 类型注册到我的 LightInject 容器中,如下所示:

registry.RegisterAssembly(typeof(SomeType).Assembly, (s, type) =>
            !s.IsClass && type.IsAssignableToGenericType(typeof(IAsyncRequestHandler<,>)
            );

但是,当我尝试调用我的调解器以实施 IAsyncRequestHandler<InheritedType,SomeResponseType> 时,它失败了。我本来希望注册 Handler 因为 InheritedType 实现了 SomeType.

我是不是做错了什么,或者在 LightInject 中有什么方法可以实现我上面描述的行为吗?


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

Handler class 关闭两个通用参数并且以后无法更改。 只需尝试手动创建 Handler 的新实例 class,您会发现无法指定通用参数,因为它们已关闭。

将您的代码更改为此。

public class Handler<T, SomeResponseType> : IAsyncRequestHandler<T, SomeResponseType> where T:IAsyncRequest<SomeResponseType>
{
    public Task<SomeResponseType> Handle(T message)
    {
        throw new NotImplementedException();
    }
}

像这样注册和解决

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