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

    补充

  • 相关阅读:
    Java 学习资料
    01 html5
    vscode 插件推荐
    08 css高级
    07 css定位
    06 css布局浮动
    05 css盒子
    04 css复合选择器 标签 行高
    03 css字体样式
    02 css基础选择器
  • 原文地址:https://www.cnblogs.com/wangchuang/p/4496641.html
Copyright © 2020-2023  润新知