博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MEF学习
阅读量:6003 次
发布时间:2019-06-20

本文共 1623 字,大约阅读时间需要 5 分钟。

简单的例子

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

补充

 

转载地址:http://ywdmx.baihongyu.com/

你可能感兴趣的文章
CCF 201503-4 网络延时
查看>>
Windows 8 Metro App开发[5]导航栏(AppBar)的使用
查看>>
Effective Java -- 使可变性最小化
查看>>
开发环境中Docker的使用
查看>>
Redis 分布式锁
查看>>
IBM、HPUX、Solaris不同之处
查看>>
verilog 里面,always和always@(*)有区别吗?
查看>>
86标准sql与92标准SQL用法区别
查看>>
SIO_KEEPALIVE_VALS 用户异常掉线检测
查看>>
Inno Setup入门(二)——修改安装过程中的图片
查看>>
服务器性能瓶颈分析方法(转载)
查看>>
JAVA学习笔记——JAVA基础语法(六)
查看>>
modelform实例学习
查看>>
EF CRUD
查看>>
初识python:time 模版
查看>>
mysql慢查询日志分析工具mysqldumpslow
查看>>
4.09.1
查看>>
电话本管理程序(实现增删改查功能)
查看>>
LOCK_TIMEOUT
查看>>
Python脱产8期 Day29 2019/5/24
查看>>