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

How to resolve list of dependencies in 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 做到这一点吗?也许方法不对,所以如果您有更好的主意,请告诉我。 目标是注入使用相同接口的不同类型的验证器列表

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);