插件架构

我想了解插件架构。 特别是在Windows Live Writer的实现中使用的那个。 我指的是你可以通过添加/删除DLL(+ config)来配置/启用/禁用/添加/删除其他function的样式。

我希望看到类似于基于Web的应用程序。 谁能指点我正确的方向?

提前致谢。

-SK

看看这篇文章 。 简而言之,您需要在高级别上执行以下操作。

  1. 定义插件必须实现的接口
  2. 创建一个子目录,其中包含要插入的插件dll的特定权限
  3. 定义配置节或文件,指定要从插件dll动态加载的类型。
  4. 使用AppDomain将插件配置和目录中的dll加载到安全沙箱中

我希望这有帮助。

您的问题已使用ASP.NET标记,但我在您的问题中没有看到任何ASP.NET特定的内容。 可插入的ASP.NET是可能的,但很难使用System.AddIn,即MAF。 我设法在大约4天内创建了一个安全的网站插件概念validation。

http://suburbandestiny.com/Tech/?p=585

http://suburbandestiny.com/Tech/?p=588

最酷的事情是终极能够在最小信任中运行加载项dll,而主机应用程序以完全或中等信任的方式运行。

我最后得出结论,创建System.AddIn是为了解决Microsoft Office面临的AddIn挑战,而不是为web.app创建AddIn的挑战。

MEF应该是添加类型模式的新亮点,但我没有任何经验。 MEF旨在成为一般解决方案,而不仅仅是解决MS Office团队的问题,因此它更有前途。

基本上,您需要使用AssemblyLoader在运行时从指定目录加载程序集,然后创建一个实例并调用它。

Assembly assembly = Assembly.LoadFrom("myAssembly.dll"); Type type = assembly.GetType("theType"); object myInstance = Activator.CreateInstance(type); 

如果你的所有插件都实现了一个暴露某种方法的接口,那就最好了……比如Load()。 然后你可以这样做:

 myInstance.Load() 

只要将myInstance转换为界面即可。

简单地通过添加DLL来自动检测插件,封装在System.Addin命名空间中。 每次重新启动程序时,它都会添加/删除给定的插件。 正如您所看到的,它不会在程序仍在运行时添加/删除插件。 如果您需要该function,则需要通过添加自己的文件事件机制来增强System.Addin代码,该机制会通知您已添加或删除了DLL。 当然,如果你想为同时执行的东西删除DLL,那DLL就不能有文件锁定。 要实现这一点,您可以在启用ShadowCopy的情况下执行每个DLL。