本文主要是介绍封装:MEF组件式框架封装,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、简介:MEF框架是用于创建可扩展的轻型应用程序的库;
二、目的:对原生结构进行封装方便使用;
三、实现步骤:
1、定义接口
public interface IMefDemoBase{void Init();}
2、实现接口和特性
/// <summary> ① 必须拥有Export特性 [Export(typeof(IMefDemoBase))] </summary>[Export(typeof(IMefDemoBase))]public class MefDemoBase : IMefDemoBase{public void Init(){throw new NotImplementedException();}}
3、 构建组件集合
/// <summary> 提供构建组件集合 </summary>public class MefEntityProvider<T>{// ② 必须拥有Export特性 [Export(typeof(IMefDemoBase))][ImportMany]List<T> doList;/// <summary> 获取所有接口 </summary>public List<T> DoList{get { return doList; }set { doList = value; }}/// <summary> 通过一组应用程序集创建一个MefEntityProvider </summary>public static MefEntityProvider<T> CreateInstance(List<Assembly> asses){// ③ 必须拥有Export特性 [Export(typeof(IMefDemoBase))]MefEntityProvider<T> provider = new MefEntityProvider<T>();var catalog = new AggregateCatalog();asses.ForEach(l => catalog.Catalogs.Add(new AssemblyCatalog(l)));var _container = new CompositionContainer(catalog);_container.ComposeParts(provider);return provider;}/// <summary> 通过一个应用程序集创建一个MefEntityProvider </summary>public static MefEntityProvider<T> CreateInstance(Assembly ass){MefEntityProvider<T> provider = new MefEntityProvider<T>();var catalog = new AggregateCatalog();catalog.Catalogs.Add(new AssemblyCatalog(ass));var _container = new CompositionContainer(catalog);_container.ComposeParts(provider);return provider;}}
四、实现实例
class Program{static void Main(string[] args){List<Assembly> ass = new List<Assembly>();ass.Add(Assembly.GetEntryAssembly());MefEntityProvider<IMefDemoBase> provider = MefEntityProvider<IMefDemoBase>.CreateInstance(ass);provider.DoList.ForEach(l => Console.WriteLine(l.ToString()));Console.Read();MefEntityProvider<IDisposable> provider1 = MefEntityProvider<IDisposable>.CreateInstance(ass);provider1.DoList.ForEach(l => Console.WriteLine(l.ToString()));Console.Read();}}
注:此结构会在加载的程序集中自动找到自定义的接口,实现动态加载
五、设计结构图
这篇关于封装:MEF组件式框架封装的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!