【问题标题】:Can't resolve NameValueCollection with Autofac无法使用 Autofac 解析 NameValueCollection
【发布时间】:2010-03-05 18:28:19
【问题描述】:

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

考虑以下代码sn-p:

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 本身的问题?

【问题讨论】:

    标签: c# .net autofac namevaluecollection


    【解决方案1】:

    这是设计使然。见Autowiring

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

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

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

    如果这不起作用,请尝试

    builder.Register(c => new NameValueCollection());
    

    【讨论】:

    • new NameValueCollection() 后面加上一些括号,一切都会变大:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多