代码示例托管地址: MEF_First_Touch
简单理解MEF就是.NET中的一个IOC框架。主要是为了增加开发的应用的扩展性的。目的其实和其他IOC框架一样,就是解耦。
IOC,即控制反转。
个人理解:
它其实是在接口的基础上进一步解耦,像我们一开始写接口,就是为了可以使用多种实现嘛,但是呢,你在使用过程中,在一个地方还是只能用一个(多个地方就要一个一个new,顶多用个工厂封装下,但你还得在用的地方告诉工厂使用哪个实现);
而此时IOC就可以有用了,它只需要你在使用的地方进行接口声明即可(顶多再加一些特殊的标识——看你用哪个IOC框架了),至于实例化哪个实现IOC框架来帮你做。这里不是你告诉IOC用哪个实现,而是告诉IOC我要什么样的处理,然后IOC来找对应匹配的实现。其实在这里面工厂和IOC很相似,甚至说不清,简单理解就是,工厂的实例化的控制权其实还是在具体使用工厂的地方,而IOC中实例化的控制权在IOC容器中。
下面举个例子描述下:
既然MEF是一个IOC框架,使用自然会需要以下三点:
在MEF中实现的定义用 导出 来处理,本示例中,我们首先定义一个接口,然后添加一个实现,内容如下:
interface IStudy { void Study(); } [Export(typeof(IStudy))] class MEFStudy : IStudy { public void Study() { Console.WriteLine("Study MEF"); } }
在MEF中要使用对应的实现,我们使用 导入 功能,代码如下:
[Import] IStudy Study { get; set; }
调用内部方法则是:
Study.Study();
在MEF中,这个处理里涉及的内容有容器和目录,具体使用如下:
//利用目录添加到容器 var catalog = new AssemblyCatalog(typeof(Program).Assembly); var container = new CompositionContainer(catalog); container.ComposeParts(this);
至此,最简单的MEF使用就学会了。关于更多的导入导出等内容,后面将具体讨论。
奇葩史