zoukankan      html  css  js  c++  java
  • 使用MEF宿主在一个应用程序上

      使用MEF宿主在一个应用程序上,这个应用程序创建一个CompositionContainer的实例,并往容器内添加Composable Parts。

    以下是使用宿主的步骤。

    1. 创建一个宿主类。在示例中,我们使用控制台应用来做宿主。
    2. 添加System.ComponentModle.Composition引用。
    3. 添加一个Compose()方法,用来创建容器实例和组合宿主。
    4. 添加一个Run()方法,调用Compose()方法。
    5. 在Main()方法中,调用宿主类。
      using System.ComponentModel.Composition;
      using System.ComponentModel.Composition.Hosting;
      using System.Reflection;
      using System;
    
      public class Program
      {
        public static void Main(string[] args)
        {
          Program p = new Program();
          p.Run();
        }
    
        public void Run()
        {
          Compose();
        }
    
        private void Compose()
        {
          var container = new CompositionContainer();
          container.ComposeParts(this);
        }
      }
    

      6.定义一个或多个Exports,这些Exports将被Import到宿主中。

      public interface IMessageSender
      {
        void Send(string message);
      }
    
      [Export(typeof(IMessageSender))]
      public class EmailSender : IMessageSender
      {
        public void Send(string message)
        {
          Console.WriteLine(message);
        }
      }
    

      7.在宿主中添加属性并打Import标志。

      [Import]
      public IMessageSender MessageSender { get; set; }
    

      8.有两种方式将组件(Parts)添加到容器中。

    一、直接将组件(Parts)添加到容器内。

      private void Compose()
      {
        var container = new CompositionContainer();
        container.ComposeParts(this, new EmailSender());
      }
    

    二、通过程序集目录添加。

      private void Compose()
      {
        var catalog = new AssemblyCatalog(System.Reflection.Assembly.GetExecutingAssembly());
        var container = new CompositionContainer(catalog);
        container.ComposeParts(this);
      }
    

    上面的步骤完成后,代码如下:

      using System.ComponentModel.Composition;
      using System.ComponentModel.Composition.Hosting;
      using System.Reflection;
      using System;
    
      public class Program
      {
        [Import]
        public IMessageSender MessageSender { get; set; }
    
        public static void Main(string[] args)
        {
          Program p = new Program();
          p.Run();
        }
    
        public void Run()
        {
          Compose();
          MessageSender.Send("Message Sent");
        }
    
        private void Compose()
        {
          AssemblyCatalog catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());
          var container = new CompositionContainer(catalog);
          container.ComposeParts(this);
        }
      }
    
      public interface IMessageSender
      {
        void Send(string message);
      }
    
      [Export(typeof(IMessageSender))]
      public class EmailSender : IMessageSender
      {
        public void Send(string message)
        {
          Console.WriteLine(message);
        }
      }
    

    想查看更详细信息,请点击这里

  • 相关阅读:
    poj 1579(动态规划初探之记忆化搜索)
    hdu 1133(卡特兰数变形)
    CodeForces 625A Guest From the Past
    CodeForces 625D Finals in arithmetic
    CDOJ 1268 Open the lightings
    HDU 4008 Parent and son
    HDU 4044 GeoDefense
    HDU 4169 UVALive 5741 Wealthy Family
    HDU 3452 Bonsai
    HDU 3586 Information Disturbing
  • 原文地址:https://www.cnblogs.com/OliverZh/p/MEF2.html
Copyright © 2011-2022 走看看