在编译时不知道类型的情况下,使用Windsor解析泛型接口

本文关键字:Windsor 使用 泛型接口 情况下 编译 不知道 类型 | 更新日期: 2023-09-27 17:50:41

对于Windsor,我可以这样做:

var validators = container.ResolveAll<IEntityValidator<Product>>();

但是我不知道编译时的类型。我需要这样的代码:

var type = obj.GetType();
var validators = container.ResolveAll<IEntityValidator<...type...>>();

显然,上面的代码不是正确的解决方案。我猜需要一些反射魔法。如果和温莎有可能的话。是吗?

在编译时不知道类型的情况下,使用Windsor解析泛型接口

这可能不是很完整,但它可能接近你想要做的:

var typeParam = obj.GetType();
var type = typeof(IEntityValidator<>).MakeGenericType(typeParam);
container.Resolve(type);

您可以使用反射手工制作您想要的类型。像这样:

var wantedGenericParam = obj.GetType();
var genericType = typeof(IEntityValidator<>).MakeGenericType(wantedGenericParam);
var allValidators = container.ResolveAll(genericType);

简短的回答是否定的。container.ResolveAll<IEntityValidator<Product>>()完成什么是在编译时而不是在运行时决定的。