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);
        }
      }
    

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

  • 相关阅读:
    java Class的 getSuperclass与getGenericSuperclass区别
    再有人问你volatile是什么,把这篇文章也发给他
    深入理解乐观锁与悲观锁
    再有人问你Java内存模型是什么,就把这篇文章发给他
    再有人问你synchronized是什么,就把这篇文章发给他
    《成神之路-基础篇》JVM——Java内存模型(已完结)
    css
    css
    require.js
    css -border
  • 原文地址:https://www.cnblogs.com/OliverZh/p/MEF2.html
Copyright © 2011-2022 走看看