我正在尝试了解插件架构。特别是在Windows Live Writer的实现中使用的那个。我指的是你可以通过添加/删除DLL(+ config)来配置/启用/禁用/添加/删除其他功能的样式。
我希望看到基于网络的应用程序有类似的东西。有人可以指出我正确的方向吗?
提前致谢。
-SK
答案 0 :(得分:3)
看看这个article。简而言之,您需要在高级别上执行以下操作。
我希望这会有所帮助。
答案 1 :(得分: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团队的问题,所以它更有前途。
答案 2 :(得分:0)
基本上,您需要使用AssemblyLoader在运行时从指定目录加载程序集,然后创建一个实例并调用它。
Assembly assembly = Assembly.LoadFrom("myAssembly.dll");
Type type = assembly.GetType("theType");
object myInstance = Activator.CreateInstance(type);
如果所有插件都实现了一个暴露某种方法的接口,那就最好了......比如Load()。然后你可以这样做:
myInstance.Load()
如果您将myInstance强制转换为界面。
答案 3 :(得分:0)
只需添加DLL即可自动检测插件,并封装在System.Addin命名空间中。每次重新启动程序时,它都会添加/删除给定的插件。如您所见,它不会在程序仍在运行时添加/删除插件。如果您需要该功能,则需要通过添加自己的文件事件机制来增强System.Addin代码,该机制会通知您已添加或删除了DLL。当然,如果你想删除一个同时执行的DLL,那DLL就不能有文件锁。为此,您可以在启用ShadowCopy的情况下执行每个DLL。