【发布时间】:2014-03-28 03:40:07
【问题描述】:
我找不到有关将集合解析为基类的问题。我有以下使用 AutoFac 解析处理程序的伪测试类:
namespace Test {
interface IEventEmitter {}
interface IEventHandler {}
interface IEventHandler<in T> : IEventHandler where T: IEventEmitter {}
interface ISomeClass : IEventEmitter {}
class SomeClass : ISomeClass
{
// 2 handlers should be resolved here, not one!
public SomeClass(IEnumerable<IEventHandler> handlers) {}
}
class GenericEventHandler : IEventHandler {}
class DedicatedEventHandler : IEventHandler<ISomeClass> {}
[TestClass]
class TestClass
{
[TestMethod]
private void TestHandlers()
{
var builder = new ContainerBuilder();
// registered in order to resolve handlers
builder.RegisterType<SomeClass>().As<ISomeClass>();
builder.RegisterType<GenericEventHandler>().As<IEventHandler>();
builder.RegisterType<DedicatedEventHandler>().As<IEventHandler<ISomeClass>>();
var container = builder.Build();
using (var scope = container.BeginLifetimeScope())
{
var instanceWithHandlers = scope.Resolve<ISomeClass>();
}
}
}
}
请注意,我正在向 ISomeClass 接口注册一个专用处理程序,以及一个泛型 一个用于任何类型的事件发射器。我的期望是 SomeClass 构造函数将被注入 2 个处理程序——通用的和专用的。
不幸的是,事实并非如此。我在这里做错了什么?
谢谢。
【问题讨论】: