C#学习教程:注入一个包含所有已注册接口实现的枚举我希望能够注册多个实现并让我的DI容器将其中的可枚举注入到这样的类中:publicMyProcessingThing(IMyProcessor[]processors){this._processors=processors;}publicvoidProcessAll(){foreach(varprocessorinthis._processors){处理器。过程();}}}这可能吗?我当前的IMyProcessor实现静态地查找所有IMyProcessor实现,但如果可以的话,我宁愿通过容器进行查找。我正在使用Unity,但我很好奇其他容器是否支持它。编辑:感谢您到目前为止的回答;明确地说,我想将MyProcessorLibrary注入另一个类,并将其构建为依赖于对象树的连接的一部分,例如公共类MyProcessorRepository{publicMyProcessorRepository(MyProcessorLibraryprocessorLibrary){}}publicclassMyProcessorService{publicMyProcessorService(MyProcessorRepositoryprocessorRepository){}}//注册一堆IMyProcessor...varservice=container.Resolve();我不能代表Unity,因为我没有使用它,但我确实可以使用Ninject(请参阅多重注入)。是的,这是可以做到的。您所需要的只是为您在接口中注册的类型提供字符串名称。没有字符串名称的Register仍然在内部指定一个名称(据我所知它是“默认”),它在您调用Resolve时得到解析,但在您调用ResolveAll时不会解析。因此,您可能需要为所有处理器提供一些名称。来自msdn的示例(改编)://创建容器并使用每个类型的名称注册类型IUnityContainermyContainer=newUnityContainer();我的容器.RegisterType();//默认myContainer.RegisterType("MyProcessorB");myContainer.RegisterType("MyProcessorC");//检索为IMyProcessor注册的非默认类型列表//列表将仅包含类型MyProcessorB和MyProcessorCIEnumerableserviceList=myContainer.ResolveAll();//用法varlibrary=newMyProcessorLibrary(serviceList);library.ProcessAll();这来自MicrosoftUnity2.0文档。检查您使用的是哪个版本。不确定其他人的IoC。//创建容器并使用每个类型的名称注册类型IUnityContainermyContainer=newUnityContainer();我的容器.RegisterType();myContainer.RegisterType("number2");//检索为IMyService注册的非默认类型列表IEnumerableprocessors=myContainer.ResolveAll();编辑://使用此属性[Dependency]更新MyProcessorLibrarypublicIEnumerableMyProcessingThing{get{return_processors;}设置{_processors=值;}}//然后像这样注入库类varlib=myContainer.Resolve();myProcessorRepository(lib)它完全支持MEF。必须导出所有实现该接口的类,然后使用[ImportMany]示例:以上是C#学习教程:InjectingEnumerablewithallregisteredinterfaceimplementations。C#学习教程,希望大家多多关注——publicinterfaceIMyProcessor{voidProcess();}[Export(typeof(IMyProcessor)]publicclassFirstProc:IMyProcessor{...}[Export(typeof(IMyProcessor)]publicclassSecondProc:IMyProcessor{...}[Export]publicclassMyTest(){[ImportMany]publicIMyProcessor[]MyProcessors{get;set;}}本文采集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除,如有请注明出处: