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

本文关键字:默认值 注册 类型 参数 | 更新日期: 2023-09-27 18:29:16

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

公共接收器(ISerializer序列化程序、字符串密钥、IInterceptorinterceptor=默认(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")
             });

我得到以下例外:

类型上不存在匹配的构造函数"通道.接收器".

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

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

默认参数由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)
    });