Autofac:仅包含一个元素的解析列表失败

时间:2019-04-11 13:54:49

标签: c# autofac

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   (ReflectionActivator),服务=   [docXtrans.TuevApi.Core.Data.Service.IScheduleHandler],生命周期=   Autofac.Core.Lifetime.CurrentScopeLifetime,共享=共享,   所有权= OwnedByLifetimeScope --->找不到任何构造函数   与'Autofac.Core.Activators.Reflection.DefaultConstructorFinder'   类型'docXtrans.TuevApi.Core.Data.Service.BaseConfigScheduleHandler'   可以使用可用的服务和参数来调用:不能   解析参数   'System.Collections.Generic.List 1[ISchedule] schedules' of constructor 'Void .ctor(System.Collections.Generic.List 1 [BaseConfigSchedule],   System.Collections.Generic.List`1 [ISchedule])'。   (有关详细信息,请参阅内部异常。)

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

1 个答案:

答案 0 :(得分:1)

我建议使用一种受支持的枚举类型。根据{{​​3}}:

  

枚举(IEnumerable,IList,ICollection)

在您的情况下,可能是:

IEnumerable<ISchedule> schedules