WEB开发网
开发学院WEB开发ASP.NET 闲谈可插拔式应用程序的开发 阅读

闲谈可插拔式应用程序的开发

 2010-10-09 08:16:14 来源:WEB开发网   
核心提示: 这个接口是主应用程序继承的,现在只有MailNotice功能,闲谈可插拔式应用程序的开发(2),AddMenuItem是供插件调用的方法,创建一个菜单,在主应用程序中有一个加载插件的地方,这里的插件是dll,RegisterComponent是插件向主应用程序提供一些方法,publicinter

 这个接口是主应用程序继承的,现在只有MailNotice功能, AddMenuItem是供插件调用的方法,创建一个菜单。RegisterComponent是插件向主应用程序提供一些方法。

public interface IPlugin 
{ 
  void Initialize(IPluginHost pluginHost); 
  void DoSomething(); 
} 

上面是插件的接口。

在主应用程序中有一个加载插件的地方。这里的插件是dll,所以我通过反射去加载这些dll。

public void LoadPlugin() 
{ 
  foreach (string fileName in Directory.GetFiles(Directory.GetCurrentDirectory() + "\\" + "Plugins", "*.dll")) 
  { 
    Assembly assembly = Assembly.LoadFile(fileName); 
    foreach (Type pluginType in assembly.GetTypes()) 
    { 
      if (!pluginType.IsPublic || pluginType.IsAbstract || pluginType.IsInterface) 
        continue; 
      Type concreteType = pluginType.GetInterface(typeof(IPlugin).FullName, true); 
 
      if (concreteType != null) 
      { 
        IPlugin plugin = (IPlugin)Activator.CreateInstance(pluginType); 
        plugin.Initialize(this); 
        pluginList.Add(plugin); 
        break; 
      } 
    } 
  } 
} 

主应用程序执行的代码如下:

void Start() 
{ 
  //邮件发送祝福 
  MailNotice("中秋快乐"); 
  //加载插件 
  LoadPlugin(); 
  //运行插件 
  if (pluginList.Count > 0) 
  { 
    foreach (IPlugin plugin in pluginList) 
    { 
      plugin.DoSomething(); 
    } 
  } 
 
  Console.ReadLine(); 
} 

上一页  1 2 3 4  下一页

Tags:闲谈 应用程序 开发

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接