代码之家  ›  专栏  ›  技术社区  ›  pistacchio

MEF:目录部分目录

  •  6
  • pistacchio  · 技术社区  · 15 年前

    我想写一个简单的 MEF 演示以了解它。我在跟随 this 教程,但似乎过时了。这个可下载的例子是可行的,但是它使用了一个包含的程序集,该程序集比当前的framwework 4(4.0)提供的版本(2008.9.4.0)旧2个版本。

    特别是,它使用的DirectoryPartCatalog在最新的库中找不到。有人能提供一个如何从当前版本的MEF目录中发现可插入程序集的例子吗?

    谢谢

    3 回复  |  直到 15 年前
        1
  •  6
  •   desco    15 年前

    您需要进行一些更改,以使此示例编译并使用内置版本的system.componentModel.composition运行。

    class Program
    {
        [ImportMany] // [Import]
        public IEnumerable<string> Messages { get; set; }
    
        [ImportMany] // [Import]
        public IEnumerable<IOutputString> OutputSet { get; set; }
    
        [Import("OutputMessages")]
        public Action<IEnumerable<IOutputString>, IEnumerable<string>> OutputMessages { get; set; }
    
        public void Run()
        {
    
            var catalog = new AggregateCatalog(); // AggregatingComposablePartCatalog
            catalog.Catalogs.Add(new DirectoryCatalog(@"..\..\..\ExternalMessages\bin\Debug")); // DirectoryPartCatalog
            catalog.Catalogs.Add(new DirectoryCatalog(@"..\..\..\ExtraMessages")); // DirectoryPartCatalog
            catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly())); // AttributedAssemblyPartCatalog
            var container = new CompositionContainer(catalog); // CompositionContainer(catalog.CreateResolver());
    
            // container.AddPart(this);
            // container.Compose();
            container.ComposeParts(this);
    
            OutputMessages(OutputSet, Messages);
    
        }
    
        static void Main(string[] args)
        {
            Program p = new Program();
            p.Run();
        }
    }
    
        2
  •  2
  •   pistacchio    15 年前

    现在调用DirectoryPartCatalog DirectoryCatalog

        3
  •  2
  •   MarekBaron    15 年前

    我想,你在寻找 DirectoryCatalog

    推荐文章