闲谈可插拔式应用程序的开发
2010-10-09 08:16:14 来源:WEB开发网插件的目录如下图:
查看原图(大图)
运行效果:
查看原图(大图)
扩展性和兼容性:
如果我想在主应用程序中添加一个ShowMessageBox方法。而且这个方法供插件调用。考虑到版本的兼容性,公开的接口是不能修改的。比如:将主应用程序的接口修改成:
public interface IPluginHost
{
void AddMenuItem(string name, MenuItemClickedHandler clickHandler);
void RegisterComponent<T>(T component) where T : class;
T GetComponent<T>() where T : class;
void MailNotice(string messaage);
void ShowMessageBox(string message);
}
那么如何实现呢,很简单,使用依赖注入的方式。添加下面接口:
public interface IMessageBoxHost
{
void ShowMessageBox(string message);
}
通过主应用程序的构造函数,将MessageBoxHost对下岗注入到主应用程序,在通过插件的构造函数,将其注入插件之中。
主应用程序的构造函数:
public Program(IMessageBoxHost messageBoxHostInstance)
{
this.messageBoxHostInstance = messageBoxHostInstance;
}
插件构造函数:
public PluginA(IMessageBoxHost messageBoxHost)
{
this.messageBoxHost = messageBoxHost;
}
修改实例化插件的代码:
IPlugin plugin = (IPlugin)Activator.CreateInstance(pluginType, new object[] { messageBoxHostInstance });
这样我们对版本兼容有了保障。
总结:本文闲谈了可插拔应用程序的开发原理,文章的后面提供了插件和应用程序之间版本兼容的一种方案。有讨论才有进步,欢迎各位留言。
参考代码:http://files.cnblogs.com/zhuqil/Plugin.rar
作者:朱祁林
出处:http://zhuqil.cnblogs.com
更多精彩
赞助商链接