封装:MEF组件式框架封装
来源:互联网 发布:微信红包牛牛源码教程 编辑:程序博客网 时间:2024/06/03 15:05
一、简介: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(); } }
注:此结构会在加载的程序集中自动找到自定义的接口,实现动态加载
五、设计结构图
0 0
- 封装:MEF组件式框架封装
- 剖析prototype框架的封装机制(OO特性,组件封装)
- 剖析prototype框架的封装机制(OO特性,组件封装)
- JavaScript类库/组件/框架封装的总体结构
- Android--okhttp框架封装思路/网络请求组件的创建
- ProgressBar 进度条组件封装
- 顶部组件的封装
- 上传组件uploadify封装
- 最近工作:封装组件
- 初谈组件封装
- Echart组件封装
- JS组件封装
- 进度环组件封装
- js组件封装
- 起步-封装组件
- Vue封装分页组件
- ReactNative 组件封装---Modal
- MEF框架
- 使用react写的第一个轮播图组件
- 如何避免outlook发信,忘记标题和附件
- CCF 201312-4 有趣的数
- cadence16.6差分约束和走线
- 数组去重的两种方法
- 封装:MEF组件式框架封装
- 【SDOI2013】【BZOJ 3129】方程 (转)
- Android屏幕适配专题
- 常用正则sql 查询
- python中turtle模块画没有角的方格
- JDK1.5新特性--静态导入
- tomcat 部署web项目,2个项目端口号要区分
- Spring MVC入门
- mysql rank 排序