Я обновляю код от Autofac 1.4 до 2.1.10 Предвыпускных версий.
Мой модуль ранее выполнил регистрацию как это:
builder.RegisterCollection<IExceptionHandler>()
.As<IEnumerable<IExceptionHandler>>()
.FactoryScoped();
builder.Register<AspNetExceptionHandler>()
.As<IExceptionHandler>()
.MemberOf<IEnumerable<IExceptionHandler>>()
.FactoryScoped();
Теперь, RegisterCollection
не имеет никакой перегрузки без параметров. Я не забочусь о присвоении его об имени. Принятие нормально просто передавать в null
, мой код похож на это в 2,1:
builder.RegisterCollection<IExceptionHandler>(null)
.As<IEnumerable<IExceptionHandler>>()
.InstancePerDependency();
builder.RegisterType<AspNetExceptionHandler>()
.As<IExceptionHandler>()
.MemberOf<IEnumerable<IExceptionHandler>>(null)
.InstancePerDependency();
Однако, когда я компилирую, я получаю следующую ошибку относительно .MemberOf
:
Используя общий метод 'Autofac. RegistrationExtensions. MemberOf (Autofac. Разработчик. RegistrationBuilder, строка)', требует '3' аргументы типа
Я пытался включить имя набора вместо пустого указателя, на всякий случай, и это не имело никакого эффекта.
Что надлежащий путь состоит в том, чтобы зарегистрировать наборы в 2,1?
Насколько я понимаю, вы просто регистрируете кучу типов IExceptionHandler
, а затем, когда вы запрашиваете IEnumerable
Autofac 2 просто обо всем позаботится за вас.
Со страницы NewInV2 :
builder.RegisterType<A1>().As<IA>();
builder.RegisterType<A2>().As<IA>();
var container = builder.Build();
// Contains an instance of both A1 and A2
Assert.AreEqual(2, container.Resolve<IEnumerable<IA>>().Count());