闲谈可插拔式应用程序的开发
2010-10-09 08:16:14 来源:WEB开发网 这个接口是主应用程序继承的,现在只有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();
}
更多精彩
赞助商链接