zoukankan      html  css  js  c++  java
  • 插件机制

     1  #region 插件机制
     2         //  宿主(host):程序寄宿或挂载对象
     3         //  有了宿主就可以定义插件(plug-in):符合指定宿主某种接口,并能够提供特定功能的程序
     4 
     5         //  插件架构(插件机制):它降低了宿主与具体的应用模块的依赖,宿主不关心每一个具体的插件如何实现,
     6         //  只要该插件满足宿主的规范,那么宿主就能够加载它。
     7         //  作为插件,只要满足了宿主的规范便可以被宿主加载
     8 
     9         // 使用插件架构时一般都会使用到 反射(reflector)
    10 
    11         //  规范 在实际编码中体现为 Interface 或者 abstract class
    12 
    13         //  1.定义一个接口
    14         /// <summary>
    15         /// 插件应遵循的接口
    16         /// </summary>
    17         public interface IPlugIn{
    18             void Show();
    19         }
    20 
    21         //  2.定义一个插件,需要实现上述接口
    22         /// <summary>
    23         /// 具体插件
    24         /// </summary>
    25         public class MyPlugIn : IPlugIn
    26         {
    27             //  IPlugIn 成员
    28             public void Show()
    29             {
    30                 Console.WriteLine("this is my plugin");
    31             }
    32         }
    33 
    34         //  定义一个 宿主 ,并利用 反射 创建具体插件的实例
    35         public class PlugInHost
    36         {
    37             /// <summary>
    38             /// 加载所有的插件
    39             /// </summary>
    40             /// <returns></returns>
    41             public List<IPlugIn> LoadPlugIns()
    42             {
    43                 List<IPlugIn> plugList = new List<IPlugIn>();
    44                 Assembly pluginAssembly = null;
    45                 string path = System.IO.Directory.GetCurrentDirectory() + "/plugins/MyPlugin.dll";
    46                 try
    47                 {
    48                     //  加载程序集
    49                     pluginAssembly = Assembly.LoadFile(path);
    50                 }
    51                 catch (Exception ex)
    52                 {
    53 
    54                     Console.WriteLine(ex.Message);
    55                     return plugList;
    56                 }
    57 
    58                 Type[] types = pluginAssembly.GetTypes();
    59                 foreach (Type type in types)
    60                 {
    61                     if (type.GetInterface("IPlugIn") != null)
    62                     {
    63                         //  创建插件的实例
    64                         plugList.Add((IPlugIn)Activator.CreateInstance(type));
    65                     }
    66                 }
    67 
    68                 return plugList;
    69             }
    70         }
    71 
    72         //  定义完了插件,扩展规则,宿主之后调用
    73         static void Main(string[] args)
    74          {
    75              PlugInHost host = new PlugInHost();
    76              var plugins = host.LoadPlugIns();
    77              foreach (var plugin in plugins)
    78              {
    79                  plugin.Show();
    80              }
    81  
    82              Console.Read();
    83          }
    84          
    85         #endregion
  • 相关阅读:
    (网页)html中页面传递参数不用cookie不用缓存,js方法搞定
    (网页)table加上分页,优点可随便加样式
    (后端)分页比较好的语句
    (后端)Spring手动回滚事务
    jquery 插件开发
    mysql 触发器
    mysql 存储过程
    YaHoo 前端优化军规
    html5 离线存储
    java 网络编程
  • 原文地址:https://www.cnblogs.com/huangzewei/p/9406055.html
Copyright © 2011-2022 走看看