【发布时间】: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.List
1[ISchedule] schedules' of constructor 'Void .ctor(System.Collections.Generic.List1[BaseConfigSchedule], System.Collections.Generic.List`1[ISchedule])'。 (有关详细信息,请参阅内部异常。)
我需要这两种情况,并且希望灵活地在此集合中包含 1 个或多个元素。我该如何解决这个问题?
【问题讨论】: