我想了解插件架构。特别是在Windows Live Writer的实施中使用的一个。我指的是可以通过添加/删除DLL(+ config)来配置/启用/禁用/添加/删除附加功能的样式。插件架构
我希望看到类似的基于Web的应用程序的东西。任何人都可以请我指出正确的方向?
在此先感谢。
-SK
我想了解插件架构。特别是在Windows Live Writer的实施中使用的一个。我指的是可以通过添加/删除DLL(+ config)来配置/启用/禁用/添加/删除附加功能的样式。插件架构
我希望看到类似的基于Web的应用程序的东西。任何人都可以请我指出正确的方向?
在此先感谢。
-SK
基本上你需要从一个指定的目录使用AssemblyLoader加载程序集在运行时,然后创建一个实例,并调用它。
Assembly assembly = Assembly.LoadFrom("myAssembly.dll");
Type type = assembly.GetType("theType");
object myInstance = Activator.CreateInstance(type);
它的工作原理最好的,如果你所有的插件实现暴露出一定的方法......像负载的接口()。那么你可以这样做:
myInstance.Load()
只要你将myInstance投射到你的接口。
看看这个article。简而言之,您需要在高层次上进行以下操作。
我希望这可以帮助的。
简单地通过添加一个或多个DLL来自动检测插件封装在System.Addin命名空间中。每次重新启动程序时,它都会添加/删除给定的插件。正如你所看到的,它不会做的是在程序仍在运行时添加/删除一个插件。如果您需要该功能,则需要添加自己的文件事件机制来扩充System.Addin代码,以便通知您添加或删除了DLL。当然,如果你想删除一个DLL,但是这个DLL一定不能有文件锁定。为了达到这个目的,你需要开启ShadowCopy来执行每个DLL。
你的问题被标记为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团队中的问题,所以它更有希望。
MEF不取代MAF。 MEF是关于可扩展性的,MAF是关于隔离性的。 – 2010-12-13 22:24:16
问题在于它会造成安全风险。最好使用“AppDomain”加载到沙箱中。 – James 2010-12-13 21:24:48