zoukankan      html  css  js  c++  java
  • MEF学习

    简单的例子

    public interface ILogger
    {
        void WriteLog(string message);
    }
        
    [Export(typeof(ILogger))]
    public class TXTLogger : ILogger
    {
        public void WriteLog(string message)
        {
            MessageBox.Show("TXTLogger>>>>>" + message);
        }
    }
    
    [Export(typeof(ILogger))]
    public class DBLogger : ILogger
    {
        public void WriteLog(string message)
        {
            MessageBox.Show("DBLogger>>>>>" + message);
        }
    }

     这里需要注意的是在进行导入的时候如果辨别到底是使用的哪一个实现呢?在MEF中提供了一个专门用于导入多个实现的特性[System.ComponentModel.Composition.ImportManyAttribute],如上的日志实现示例就可以通过如下的方式实现多部件导入。

    [ImportMany]
    public IEnumerable<ILogger> Loggers { get; set; }

         

       ImportManyAttribute特性可以将实现接口的所有实现全部组合起来。下面为使用[ImportMany]的完整示例代码:

    namespace MEFTraining.CPC
    {
        public partial class MainPage : UserControl
        {
            [ImportMany]
            public IEnumerable<ILogger> Loggers { get; set; }
    
            public MainPage()
            {
                InitializeComponent();
    
                CompositionInitializer.SatisfyImports(this);
                if (Loggers != null)
                {
                    foreach (var logger in Loggers)
                    {
                        logger.WriteLog("Hello World");
                    }
                }
            }
        }
    
        public interface ILogger
        {
            void WriteLog(string message);
        }
    
        [Export(typeof(ILogger))]
        public class TXTLogger : ILogger
        {
            public void WriteLog(string message)
            {
                MessageBox.Show("TXTLogger>>>>>" + message);
            }
        }
    
        [Export(typeof(ILogger))]
        public class DBLogger : ILogger
        {
            public void WriteLog(string message)
            {
                MessageBox.Show("DBLogger>>>>>" + message);
            }
        }
    }

    补充

  • 相关阅读:
    iris中间件
    go并发设计模式 --资源生成器模式
    Navicate
    golang sftp传输文件
    升级python
    在centos上面开机自启动某个程序
    文件MD5
    python模块之logging
    python之八大排序方法
    python生成器
  • 原文地址:https://www.cnblogs.com/wangchuang/p/4496641.html
Copyright © 2011-2022 走看看