使用Windsor,我可以这样做:
var validators = container.ResolveAll<IEntityValidator<Product>>();
但我不知道编译时的类型。我需要更像这样的代码:
var type = obj.GetType();
var validators = container.ResolveAll<IEntityValidator<...type...>>();
显然,上面的代码并不接近正确的解决方案。我猜测需要一些完美的魔法。如果与温莎完全一致的话。是吗?
答案 0 :(得分:8)
这可能不完全,但它可能接近你想要做的事情:
var typeParam = obj.GetType();
var type = typeof(IEntityValidator<>).MakeGenericType(typeParam);
container.Resolve(type);
答案 1 :(得分:1)
您可以使用反射手工制作所需的类型。像这样:
var wantedGenericParam = obj.GetType();
var genericType = typeof(IEntityValidator<>).MakeGenericType(wantedGenericParam);
var allValidators = container.ResolveAll(genericType);
答案 2 :(得分:0)
简短的回答是否定的。 container.ResolveAll<IEntityValidator<Product>>()
完成的操作是在编译时而不是在运行时决定的。它是在运行时执行的。