点燃自己

才发现已成尘

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

MEF

在应用程序中宿主MEF其实非常简单,只需要创建一个组合容器对象(CompositionContainer)的实例,然后将需要组合的部件 (Parts)和当前宿主程序添加到容器中即可。首先需要添加MEF框架的引用,既 System.ComponentModel.Composition.dll,

可能会定义一个或多个导入(Import)和导出(Export)部件,然后通过MEF容器进行组合,其实也可以理解为“依赖注入”的一种实现。比如定义一个图书接口和一个接口的实现类,在此基础上使用MEF的导入导出特性:

public interface IService
{
    void GetName();
}
    
/// <summary>
/// 导入
/// </summary>
[Export(typeof(IService))]
public class ComputerService : IService
{
    public void GetName()
    {
        Console.WriteLine("Hello MEF");
    }
}

 使用MEF的[System.ComponentModel.Composition.Export]对接口的实现进行导出设置,让接口的实现以容器部件 的方式存在,然后通过组合容器进行装配加载,这个过程中就包括了接口的实例化的过程。接下来就需要在MEF的宿主程序中定义一个接口的属性,并为其标注 [System.ComponentModel.Composition.Import]特性以实现接口实现类的导入

完整代码示例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
using System.Reflection;

namespace Test
{
    public interface IService
    {
        void GetName();
    }
    
    /// <summary>
    /// 导入 以接口设置为统一的导入接口可以变化框架为工厂 
    /// </summary>
    [Export(typeof(IService))]
    public class ComputerService : IService
    {
        public void GetName()
        {
            Console.WriteLine("Hello MEF");
        }
    }

    class Program
    {
        /// <summary>
        /// 导入接口的实现部件(Part)
        /// </summary>
        [Import]
        public IService Service { get; set; }
        
        /// <summary>
        /// 宿主MEF并组合部件
        /// </summary>
        private void Compose()
        {
            var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());
            var container = new CompositionContainer(catalog);
            //将部件(part)和宿主程序添加到组合容器
            container.ComposeParts(this,new ComputerService());
            Service.GetName();
        }

        static void Main(string[] args)
        {
            Program p = new Program();
            p.Compose();
        }
    }
}

 

posted on 2014-12-16 13:15  爱吃糖豆的猪  阅读(150)  评论(0编辑  收藏  举报