对于Windsor,我可以这样做:
var validators = container.ResolveAll<IEntityValidator<Product>>();
但是我不知道编译时的类型。我需要这样的代码:
var type = obj.GetType();
var validators = container.ResolveAll<IEntityValidator<...type...>>();
显然,上面的代码不是正确的解决方案。我猜需要一些反射魔法。如果和温莎有可能的话。是吗?
这可能不是很完整,但它可能接近你想要做的:
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>>()
完成什么是在编译时而不是在运行时决定的。