我在构造函数中有默认值的类型:
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;
你能帮我讲一下如何在构造函数中注册一个带默认值的类型吗?
答案 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)
});