我尝试使用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中有没有办法实现我上面描述的行为?
让我知道它是否不清楚,我可以尝试提供更多信息。谢谢!
答案 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>>();