c# - Autofac:解析只有一个元素的列表失败
问题描述
一、案例:
注册:
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), Services = [docXtrans.TuevApi.Core.Data.Service.IScheduleHandler], Lifetime = Autofac.Core.Lifetime.CurrentScopeLifetime, Sharing = Shared, Ownership = OwnedByLifetimeScope ---> 没有构造函数可以使用可用的服务和参数调用类型“docXtrans.TuevApi.Core.Data.Service.BaseConfigScheduleHandler”上的“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”:无法解析参数“System.Collections.Generic.List
1[ISchedule] schedules' of constructor 'Void .ctor(System.Collections.Generic.List
1 [BaseConfigSchedule],System.Collections.Generic.List`1[ISchedule])'。
我需要这两种情况,并且希望在这个集合中拥有 1 个或多个元素。我该如何解决这个问题?
解决方案
我建议使用一种受支持的枚举类型。根据文档:
枚举(IEnumerable、IList、ICollection)
在您的情况下,这可能是:
IEnumerable<ISchedule> schedules
推荐阅读
- python - 如何在正则表达式标识的两个特定列表位置之间连接列表的元素(字符串)?
- python - 从二维列表中保存的三元组单词构造句子
- reactjs - 在路径中使用参数后,两个组件在反应中混合
- css - 如果孩子有“flex:1”,css“resize:horizontal”不起作用
- python - 按照它们出现在我的驱动器上的顺序读取 csv 文件
- reactjs - React Router - 带有:id 的路径对于 HOC 包装的组件无法正常工作
- android - 从 Android Player SDK 中的 adb.exe 获取“错误:设备脱机”/设置 Unity Remote 5(已解决)
- hive - 我在尝试运行我的 sqoop 作业时出错(尝试将表从 oracle 复制到 hive)
- c# - WPF:如何将图像动态添加到数据网格?
- django - 在 Django 中使用默认 URL 值会引发 404 错误