LightInject 不解析继承的泛型类型



我正在尝试使用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>的实现调用我的中介时,它失败了。因为InheritedType实现了SomeType,所以我希望得到我注册的Handler

我在这里做错了什么,或者有任何方式在LightInject实现我上面描述的行为?


让我知道如果它不清楚,我可以试着提供更多的信息。谢谢!

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

把你的代码改成这样

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>>();

相关内容

  • 没有找到相关文章

最新更新