我正在尝试理解插件架构,特别是在Windows Live Writer的实现中使用的插件架构。我指的是通过添加/删除DLL(+配置)来配置/启用/禁用/添加/删除附加功能的样式。
我希望看到类似于Web应用程序的东西。请问有人可以指引我正确的方向吗?
提前致谢。
-SK
我希望看到类似于Web应用程序的东西。请问有人可以指引我正确的方向吗?
提前致谢。
-SK
请看这个文章。简而言之,您需要在高层次上执行以下操作:
希望这可以帮到您。
你的问题被标记为ASP.NET,但我在你的问题中没有看到任何与ASP.NET相关的内容。使用System.AddIn(又名MAF)可以实现可插拔的ASP.NET,但这很困难。我设法在大约4天内创建了一个安全的网站插件概念证明。
http://suburbandestiny.com/Tech/?p=585
http://suburbandestiny.com/Tech/?p=588
很酷的事情是最终能够在最小信任级别下运行Add-In dll,而宿主应用程序在完全或中等信任级别下运行。
我最终得出结论,System.AddIn是为解决Microsoft Office面临的AddIn挑战而创建的,而不是为了创建Web.app的AddIn所面临的挑战。
MEF应该是新的闪亮点来做插件类型模式,但我没有任何经验。 MEF旨在成为通用解决方案,而不仅仅是解决MS Office团队的问题,因此更具有前途。
Assembly assembly = Assembly.LoadFrom("myAssembly.dll");
Type type = assembly.GetType("theType");
object myInstance = Activator.CreateInstance(type);
如果您的所有插件都实现了公开某个方法(例如Load())的接口,则最好使用它。然后,您可以执行以下操作:
myInstance.Load()
假如你将myInstance强制转换为你的接口。
通过添加DLL,自动检测插件的功能被封装在System.Addin命名空间中。每次重新启动程序时,它都会添加/删除给定的插件。正如您所看到的,它不会在程序仍在运行时添加/删除插件。如果您需要这种功能,则需要通过添加自己的文件事件机制来增强System.Addin代码,以通知您已添加或删除DLL。当然,如果您想要删除正在执行的DLL,则该DLL不能被文件锁定。为了实现这一点,您需要打开ShadowCopy并执行每个DLL。