【问题标题】:Autofac: Resolve Lists with only one element failsAutofac:解析只有一个元素的列表失败
【发布时间】:2019-09-02 04:34:54
【问题描述】:

1.案例:

注册:

var builder = new ContainerBuilder();

builder.RegisterType<ExportSchedule>()
       .As<ISchedule>()
       .InstancePerLifetimeScope();

builder.RegisterType<ImportReferenceDataSchedule>()
       .As<ISchedule>()
       .InstancePerLifetimeScope();

BaseconfigScheduleHandler 类的解析:

public BaseConfigScheduleHandler(List<ISchedule> schedules) {
    this.Schedules = schedules;
}

public List<ISchedule> Schedules { get; }

这种情况下工作正常。我得到了 ISchedule 的两个注册实例。

2。案例

我将注册更改为仅注册 1 个元素:

var builder = new ContainerBuilder();

builder.RegisterType<ExportSchedule>()
       .As<ISchedule>()
       .InstancePerLifetimeScope();

在这种情况下,依赖解析失败并出现以下异常:

Autofac.Core.DependencyResolutionException : 期间发生错误 特定注册的激活。查看内部异常 详情。注册:Activator = BaseConfigScheduleHandler (反射激活器),服务 = [docXtrans.TuevApi.Core.Data.Service.IScheduleHandler],生命周期 = Autofac.Core.Lifetime.CurrentScopeLifetime,共享 = 共享, Ownership = OwnedByLifetimeScope ---> 没有找到构造函数 使用“Autofac.Core.Activators.Reflection.DefaultConstructorFinder” 键入“docXtrans.TuevApi.Core.Data.Service.BaseConfigScheduleHandler” 可以使用可用的服务和参数调用:不能 解析参数 'System.Collections.Generic.List1[ISchedule] schedules' of constructor 'Void .ctor(System.Collections.Generic.List1[BaseConfigSchedule], System.Collections.Generic.List`1[ISchedule])'。 (有关详细信息,请参阅内部异常。)

我需要这两种情况,并且希望灵活地在此集合中包含 1 个或多个元素。我该如何解决这个问题?

【问题讨论】:

    标签: c# autofac


    【解决方案1】:

    我建议使用一种受支持的枚举类型。根据the docs

    枚举(IEnumerable、IList、ICollection)

    在你的情况下,可能是:

    IEnumerable<ISchedule> schedules
    

    【讨论】:

      猜你喜欢
      • 2014-09-14
      • 2018-02-07
      • 1970-01-01
      • 2021-05-15
      • 2018-02-10
      • 1970-01-01
      • 2012-07-14
      • 1970-01-01
      相关资源
      最近更新 更多