代码之家  ›  专栏  ›  技术社区  ›  John Leidegren

如何使用say MEF导出和导入应用程序服务?

  •  5
  • John Leidegren  · 技术社区  · 14 年前

    我现在正在研究MEF,但我要寻找的答案可能与MEF无关--这都是依赖注入--我只是用MEF术语作为例子。

    简短的背景故事,我在MSDN上读了这篇文章,重点是 Composite Applications

    alt text
    (来源: microsoft.com

    我真的很想看到一些简洁的小代码示例,没有什么特别之处,只是一些东西来说明这一切是如何实现的(应用程序服务部分)。

    2 回复  |  直到 5 年前
        1
  •  3
  •   Reed Copsey    14 年前

    就MEF而言,应用程序服务只是另一个可组合的部分。您可以编写的任何接口或类都可以像服务一样工作。

    IService 接口(和使用) [ImportMany]

    然后根据需要将其导入到类中。例如,假设您有一个用于服务的公共接口库,并且您提供了:

    public interface IDataRepostory
    {
         public IList<MyType> MyTypes { get; }
    }
    

    然后可以有一个单独的库来导出特定类型:

    [Export(typeof(IDataRepository))]
    public class Repository: IDataRepostory
    {
        // implement interface for this specific "service"
    }
    

    然后,主程序就可以根据需要导入它,并针对它编写代码。例如,假设要显示客户,则需要从数据层加载客户。如果要通过存储库加载,可以将存储库导入应用程序的特定部分:

    public class CustomersViewModel
    {
         [Import]
         public IDataRepository
         {
             get; set;
         }
    
         // ...
    }
    

    然后,您可以将此服务直接组合到应用程序中。

        2
  •  0
  •   vittore    14 年前

    为实现此接口的服务和导出类声明接口。 比如你可能 IPersonBuilder ,在共享程序集中声明。你是主要的模块 MyPersonBuilder 实现接口并导出。 所有视图都使用导入 IPersonBuilder公司 对它调用方法,并使用MEF组合他们将能够调用say CreatePerson() MyPersonBuilder公司 从你的主模块。