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

    补充

  • 相关阅读:
    CSS和Js样式属性的对照关系
    CSS选择器
    主成分分析(PCA)核心思想
    线性变换的本质
    java 滤镜实现
    Spring Boot工程发布到Docker
    解决maven的报错
    spring boot初探
    WPF的Page介绍及Page Window Frame 之间的链接使用示例,嵌套问题
    浅谈WPF页间导航
  • 原文地址:https://www.cnblogs.com/wangchuang/p/4496641.html
Copyright © 2011-2022 走看看