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
  • 相关阅读:
    BZOJ 2212/BZOJ 3702
    BZOJ 4761 Cow Navigation
    BZOJ 3209 花神的数论题
    BZOJ 4760 Hoof, Paper, Scissors
    BZOJ 3620 似乎在梦中见过的样子
    BZOJ 3940 Censoring
    BZOJ 3942 Censoring
    BZOJ 3571 画框
    BZOJ 1937 最小生成树
    BZOJ 1058 报表统计
  • 原文地址:https://www.cnblogs.com/huangzewei/p/9406055.html
Copyright © 2011-2022 走看看