2010-12-13 55 views
4

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

我希望看到类似的基于Web的应用程序的东西。任何人都可以请我指出正确的方向?

在此先感谢。

-SK

回答

0

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

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

它的工作原理最好的,如果你所有的插件实现暴露出一定的方法......像负载的接口()。那么你可以这样做:

myInstance.Load() 

只要你将myInstance投射到你的接口。

+3

问题在于它会造成安全风险。最好使用“AppDomain”加载到沙箱中。 – James 2010-12-13 21:24:48

3

看看这个article。简而言之,您需要在高层次上进行以下操作。

  1. 定义一个插件必须实现
  2. 创建子目录与该插件的DLL特定权限住
  3. 定义配置部分或文件,指定动态加载的类型的接口从插件DLL。
  4. 加载DLL从插件配置&目录到一个安全沙盒中使用一个AppDomain

我希望这可以帮助的。

0

简单地通过添加一个或多个DLL来自动检测插件封装在System.Addin命名空间中。每次重新启动程序时,它都会添加/删除给定的插件。正如你所看到的,它不会做的是在程序仍在运行时添加/删除一个插件。如果您需要该功能,则需要添加自己的文件事件机制来扩充System.Addin代码,以便通知您添加或删除了DLL。当然,如果你想删除一个DLL,但是这个DLL一定不能有文件锁定。为了达到这个目的,你需要开启ShadowCopy来执行每个DLL。

1

你的问题被标记为ASP.NET,但我没有看到任何ASP.NET特定的东西在你的问题。可插入的ASP.NET是可能的,但很难使用System.AddIn,也就是MAF。我设法在大约4天内创建了一个安全的网站插件概念证明。

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团队中的问题,所以它更有希望。

+0

MEF不取代MAF。 MEF是关于可扩展性的,MAF是关于隔离性的。 – 2010-12-13 22:24:16