2015-05-15 3 views
2

Я хочу тип регистра, а не тип разрешения, а затем зарегистрировать экземпляр с использованием разрешенных значений. Что-то вроде этого:Как разрешить список зависимостей в Autofac?

//Register type: 
builder.RegisterType<ValidateImportMandatoryColumns>().Named<IValidateImport>("MandatoryColumn").As<IValidateImport>(); 
builder.RegisterType<ValidateImportNonMandatoryColumns>().Named<IValidateImport>("NonMandatoryColumns").As<IValidateImport>(); 

//Resolve 
var t1 = Container.ResolveNamed<IValidateImport>("MandatoryColumn"); 
var t2 = Container.ResolveNamed<IValidateImport>("NonMandatoryColumns"); 

//Create list with resolved values: 
List<IValidateImport> allValidators = new List<IValidateImport>(){t1,t2}; 

//Register Instance: 
builder.RegisterInstance(allValidators).As<List<IValidateImport>>(); 

Это не работает. Я не могу разрешить и снова зарегистрироваться. Вы знаете, как это сделать с помощью Autofac? Возможно, это неправильно, поэтому, пожалуйста, скажите мне, есть ли у вас идея. Цель состоит в том, чтобы ввести список валидаторов с различными типами, которые используют тот же интерфейс.

+0

Основываясь на содержании вашего вопроса и вашей заявленной цели, я обновил название. – arootbeer

ответ

3

Autofac имеет встроенную поддержку для сбора. Если вы хотите разрешить все IValidateImport, вы можете разрешить IEnumerable<IValidateImport>

var allValidators = container.Resolve<IEnumerable<IValidateImport>>(); 

См Implicit Relationship Types для получения дополнительной информации для получения дополнительной информации.


Кстати, если вы хотите обновить контейнер, который здесь не требуется, вы можете использовать следующий фрагмент кода.

var builder = new ContainerBuilder(); 
// do some registration 

var container = builder.Build(); 


var updater = new ContainerBuilder(); 
// do other registraitons 

// update the container 
updater.Update(container); 
Смежные вопросы