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

    补充

  • 相关阅读:
    Jetty容器集群配置Session存储到MySQL、MongoDB
    js清除浏览器缓存的几种方法
    Maven学习 (四) 使用Nexus搭建Maven私服
    ActiveMQ入门实例(转)
    SOAP Webservice和RESTful Webservice
    Redis集群搭建与简单使用
    如何设置SVN提交时强制添加注释
    linux下vi命令大全
    锦隆驾校考试场---大路
    锦隆驾校考试场---小路
  • 原文地址:https://www.cnblogs.com/wangchuang/p/4496641.html
Copyright © 2020-2023  润新知