什么是聚合目录?
What is AggregateCatalog
? What does it mean when you construct a new AggregateCatalog()
? What does it mean when you add assemblies to the catalog, eg catalog.Catalogs.Add(new AssemblyCatalog(someAssembly))
? Other than assemblies what can you add to the catalog? any general knowledge related to this would be helpful, too (I'm a total noob)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
MEF 中的 AggregateCatalog 基本上允许您收集多个扩展目录。当您调用 new AggregateCatalog() 时,您基本上是在实例化一个新的目录集合(不一定已填充),该集合可以包含 ComposablePartCatalog 的多个实例,而 ComposablePartCatalog 可以包含多个部分。
将其视为一个可以帮助您从多个集合中收集零件的类。
程序集只是将部件推送到调用应用程序的一种方式。您可以直接从现有装配体内部传递零件。
有关目录的更多信息,我建议阅读此。
AggregateCatalog
in MEF basically allows you to collect multiple extension catalogs. When you callnew AggregateCatalog()
, you are basically instantiating a new catalog collection (not necessarily populated) that can contain multiple instances of ComposablePartCatalog, which can contain multiple parts.Consider it a class that helps you collect parts from multiple sets.
Assemblies are just a way to push parts to the calling application. You can pass parts directly from inside the existing assembly.
For more information about catalogs, I would recommend reading this.
Mef 的学习曲线很小 - 至少浏览一次 mef.codeplex.com 上的文档。或者,如果您确实时间紧迫,请尝试截屏视频。
这个想法是,目录是导出部件(要注入的对象)或需要导入的部件(需要注入对象)的字典。可以通过多种方式填充目录(因此 diff 目录派生) -- 来自目录(所有 asm 都在一个目录中)或特定程序集。
接下来,您可以创建一个复合目录,例如,您要创建一个字典,其中包含从 DirA 和 DirB 中的特定程序集导出的所有对象。在这种情况下,您可以创建单独的目录,然后创建将两者合并的复合目录。现在,您在代码中使用这个合并的字典来请求导入/导出。
Mef has a small learning curve - go thru the docs at mef.codeplex.com atleast once. Or try screencasts if you're really pressed for time.
The idea is that a catalog is a dictionary of exported parts (objects to be injected) or parts that need imports (that need injected objects).. The catalog can be populated in multiple ways (hence the diff Catalog derivations) -- from a Directory (all asm in a dir) or a Specific assembly.
Next you can create a composite catalog e.g. you want to create a single dictionary that contains all exported objects from DirA and from this specific assembly lying in DirB. In this case, you can create individual catalogs and then a composite catalog which merges the two. Now you consume this merged dictionary in your code to ask for imports/exports.