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], Lifetime =
Autofac.Core.Lifetime.CurrentScopeLifetime, Sharing = Shared,
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.List
1 [BaseConfigSchedule],
System.Collections.Generic.List`1 [ISchedule]).
(Подробности см. Во внутреннем исключении.)
Мне нужны оба случая и я хочу быть гибким, имея 1 или более элементов в этой коллекции. Как я могу решить эту проблему?