在参数中使用默认值注册类型

时间:2014-11-05 10:42:25

标签: c# ioc-container autofac

我在构造函数中有默认值的类型:

  

public Receiver(ISerializer序列化程序,字符串键,IInterceptor   interceptor = default(IInterceptor))

我尝试注册这种类型:

       containerBuilder
            .RegisterType<Receiver>()
            .Named<IReceiver>("receiver")
            .UsingConstructor(new[] { typeof(ISerializer), typeof(string)})
            .WithParameters(new List<Parameter>
             {
                   ResolvedParameter.ForNamed<ISerializer>("stringSerializer"),
                   new NamedParameter("key", "noneKey")
             });

我得到以下例外:

  

类型上不存在匹配的构造函数   &#39; Channels.Receiver&#39;

你能帮我讲一下如何在构造函数中注册一个带默认值的类型吗?

1 个答案:

答案 0 :(得分:1)

默认参数由C#编译器在正在构建Receiver的呼叫站点插入。

但解析构造函数时,autofac不会使用它。

因此,您必须明确地将其添加为参数:

builder
    .RegisterType<Receiver>()
    .Named<IReceiver>("receiver")
    .UsingConstructor(new[] { typeof(ISerializer), typeof(string), typeof(IInterceptor) })
    .WithParameters(new List<Parameter>
    {
        ResolvedParameter.ForNamed<ISerializer>("stringSerializer"),
        new NamedParameter("key", "noneKey"),
        new NamedParameter("interceptor", null)
    });
相关问题