3

我正在使用 Autofac 2.1.12 来处理我的依赖注入,并且遇到了一个特定问题。我似乎无法解决 NameValueCollection 依赖项。

考虑以下代码片段:

class Foo
{
    public Foo(NameValueCollection collection) { }
}

static class Run
{
    public static void Main()
    {
        var builder = new ContainerBuilder();
        builder.RegisterType<NameValueCollection>();
        builder.RegisterType<Foo>();

        using (var scope = builder.Build())
            scope.Resolve<Foo>();
    }
}

它将因未处理的 DependencyResolutionException 而崩溃:

检测到循环组件依赖项:Foo -> System.Collections.Specialized.NameValueCollection -> System.Collections.Specialized.NameValueCollection。

但是,如果我将 NameValueCollection 替换为任何其他类型,则代码可以正常工作。

我做错了什么,我缺少的 NameValueCollection 类型有什么特别之处,还是 Autofac 本身的问题?

4

1 回答 1

3

这是设计使然。请参阅自动装配

Autofac 自动选择能够从容器中获取的具有最多参数的构造函数。

尝试NameValueCollection像这样注册(但不确定这是否可行):

builder.RegisterType<NameValueCollection>().UsingConstructor();

如果这不起作用,请尝试

builder.Register(c => new NameValueCollection());
于 2010-03-05T08:55:56.220 回答