2014-11-05 113 views
0

我有默认值类型中构造:与参数默认值注册类型

公共接收机(ISerializer串行器,串键,IInterceptor 拦截=缺省(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") 
      }); 

而且我得到以下异常:

类型 'Channels.Receiver'上不存在匹配构造函数。

你能帮助我如何在构造函数中注册一个具有默认值的类型?

回答

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) 
    });