interface IFoo<T> { }
interface IBar { }
class BarImpl : IBar { }
class FooImplA : IFoo<IBar> { }
class FooImplB : IFoo<BarImpl> { }
container.Register(
AllTypes.Of(typeof(IFoo<>)).From(assem)
.WithService.FirstInterface());
var bars = container.ResolveAll<IFoo<BarImpl>>();
是否有设置Windsor容器分辨率,以便bars
同时包含FooImplA
和FooImplB
?
答案 0 :(得分:3)
你做不到。为什么?尝试运行这个,这是你想要温莎做的。
var a = new FooImplA();
var b = new FooImplB();
var bars = new IFoo<BarImpl>[] { a, b };
它不会编译。
答案 1 :(得分:0)
嗯,这就是我“解决”这个问题的方法......虽然我仍然认为我可能不了解自己的问题,或者正在尝试愚蠢的事情。
private static IEnumerable<object> ResolveTypeHierarchy(Type type, Type msgType) {
var handlers = new List<object>();
foreach (var interfaceType in msgType.GetInterfaces()) {
var gType = type.MakeGenericType(interfaceType);
handlers.AddRange(container.ResolveAll(gType));
}
var baseType = msgType;
while (null != baseType) {
var gType = type.MakeGenericType(baseType);
handlers.AddRange(container.ResolveAll(gType));
baseType = baseType.BaseType;
}
return handlers;
}
ResolveTypeHierarchy(typeof(IFoo<>), typeof(BarImpl));
=> { FooImplA, FooImplB }
我应该注意到这是从研究和窥视Rhino.ServiceBus代码中获得的。