在Autofac中,是否可以为非泛型接口注册通用类型?

时间:2013-05-30 11:08:54

标签: generics autofac

我正在尝试注册一个泛型类,如下所示:

builder.RegisterGeneric(typeof(WindowContext<>))
    .AsSelf()
    .As<IWindowContext>()
    .InstancePerLifetimeScope();

WindowContext<T> : IWindowContext

上述注册导致构建ArgumentException服务'Inforbase.Presentation.IWindowContext'不是开放的泛型类型定义。

预期的行为是对最接近组合根的WindowContext<T>的依赖性将定义为该生命周期范围内的任何IWindowContext解析的实例。

我意识到这个概念有点奇怪,并且有一个奇怪的边缘情况,即同一生命周期范围内的两个类请求不同类型的WindowContext<T>。在我的场景中,错误或覆盖都是可以接受的。

这可以用Autofac吗?

1 个答案:

答案 0 :(得分:0)

我刚才意识到我所要求的并没有多大意义。离依赖关系图中离组合根最远的对象是需要首先创建的对象,并且它们无法解析IWindowContext,因为在它们被解析时,具体类型IWindowContext的{​​{1}}尚未定义。

最好的方法可能是通过使WindowContext非泛型来重新组织类结构。幸运的是,这只是一个实验,而不是我在架构中实际需要的东西。