如何解决Autofac中的依赖项列表?

时间:2015-05-15 10:05:32

标签: c# dependency-injection 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做到这一点吗?也许接近错了,所以请告诉我你是否有更好的想法。 目标是注入使用相同界面的不同类型的验证器列表

1 个答案:

答案 0 :(得分: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);