zoukankan      html  css  js  c++  java
  • MEF 编程指南(七):使用目录

    目录(Catalogs)

     
    MEF 特性编程模型的核心价值,拥有通过目录动态地发现部件的能力。目录允许应用程序轻松地使用那些通过 Export Attribute 注册自身的导出。下面列出 MEF 提供的目录。 
     
     
    程序集目录(Assembly Catalog)
     
    为了发现给定程序集所有导出,需要使用 [System.ComponentModel.Composition.Hosting.AssemblyCatalog]。
     
                var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); 
     
    文件目录(Directory Catalog)
     
    为了发现目录中所有程序集的所有导出,需要使用 [System.ComponentModel.Composition.Hosting.DirectoryCatalog]。
     
                var catalog = new DirectoryCatalog("Extensions"); 

    如果使用相对目录,这就相对于当前 AppDomain 的根目录。

    DirectoryCatalog 会一次性扫描目录,但是在目录有变动时候不会自动刷新。然而,你可以实现自己的扫描机制,调用 Catalog 的 Refresh() 方法进行扫描。一旦重新扫描(Rescans),重组(Recomposition)就会发生。
     
                var catalog = new DirectoryCatalog("Extensions");
                // 实现扫描的逻辑
                catalog.Refresh();
    注意:Silverlight 不支持 DirectoryCatalog。 
     
     
    聚集目录(Aggregate Catalog)
     
     
    当程序集目录和文件目录不能独自地满足要求或者是需要合并目录,需要使用 [System.ComponentModel.Composition.Hosting.AggregateCatalog]。AggregateCatalog 组合多个目录到单一的目录。一种常见的模式是:不仅添加当前执行的程序集,而且添加三方扩展的文件目录。你可以传递 Catalogs 集合到 AggregateCatalog 构造器,或者直接添加 Catalogs 集合,例如:catalog.Catalogs.Add(...)
     
                var catalog = new AggregateCatalog(
                    new AssemblyCatalog(Assembly.GetExecutingAssembly()),
                    new DirectoryCatalog("Extensions")); 
     
    类型目录(Type Catalog)
     
    为了发现特定类型集合的所有导出,使用 [System.ComponentModel.Composition.Hosting.TypeCatalog]。
     
     
        var catalog = new TypeCatalog(typeof(type1), typeof(type2), ...);
    发布目录(DeploymentCatalog) - 适用于 Silverlight
     
    Sliverlight 中的 MEF 包含 DeploymentCatalog 用于动态地下载远程的 XAPs。更多参考 DeploymentCatalog 章节。
     
     
    为容器(Container)使用目录(Catalog)
     
     
    为容器使用目录,简单地把目录传递给容器的构造器。
     
                var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());
                var container = new CompositionContainer(catalog);
    原文:
  • 相关阅读:
    递归的狂想(菜鸟的胡思乱想)
    关于fiddler的使用总结
    关于mac下 sublime 安装配置java及运行java个人建议
    关于VMwareFusion占用内存过多的问题提几点自己的解决方案
    (ubuntu)ubuntu的root密码设置
    Refactoring to Patterns 学习笔记2 为什么要重构?
    Refactoring to Patterns 学习笔记1 什么是重构?
    [转载]数据结构树之红黑树
    【转载】数据结构之图(存储结构、遍历)
    STL库之单链表:forward_list
  • 原文地址:https://www.cnblogs.com/JavCof/p/3680487.html
Copyright © 2011-2022 走看看