LightInject不解析继承的泛型类型

时间:2016-09-09 00:39:42

标签: c# generics mediator light-inject mediatr

我尝试使用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以来我的注册df[:15] Date Customer ID 0 01/25/2016 104064596300 1 02/28/2015 102077474472 2 11/17/2016 106430081724 3 02/24/2016 107770391692 4 10/05/2016 106523680888 5 02/24/2016 107057691592 6 11/24/2015 102472820188 7 10/12/2016 107195498128 8 01/05/2016 104796266660 9 09/30/2016 107812562924 10 10/13/2015 102809057000 11 11/21/2016 107379017712 12 11/08/2015 106642145040 13 02/26/2015 107862343816 14 10/16/2016 107383084928

我在这里做错了什么,或者LightInject中有没有办法实现我上面描述的行为?

让我知道它是否不清楚,我可以尝试提供更多信息。谢谢!

1 个答案:

答案 0 :(得分:2)

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