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个或多个元素时保持灵活。我该如何解决这个问题?
答案 0 :(得分:1)
我建议使用一种受支持的枚举类型。根据{{3}}:
枚举(IEnumerable,IList,ICollection)
在您的情况下,可能是:
IEnumerable<ISchedule> schedules