插件架构
我想了解插件架构。 特别是在Windows Live Writer的实现中使用的那个。 我指的是你可以通过添加/删除DLL(+ config)来配置/启用/禁用/添加/删除其他function的样式。
我希望看到类似于基于Web的应用程序。 谁能指点我正确的方向?
提前致谢。
-SK
看看这篇文章 。 简而言之,您需要在高级别上执行以下操作。
- 定义插件必须实现的接口
- 创建一个子目录,其中包含要插入的插件dll的特定权限
- 定义配置节或文件,指定要从插件dll动态加载的类型。
- 使用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。
- GridView的UpdateMethod没有触发
- 如何序列化NHibernate DetachedCriteria对象?
- 将值数组发送到Oracle过程以在WHERE IN子句中使用
- 更新记录Linq-to-SQL
- ASP.NET,C#,IIS,MIME类型,文件上传条件
- Sys.WebForms.PageRequestManagerServerErrorException:输入字符串的格式不正确
- 如何在没有刷新ASP.NET Web窗体中的当前页面的情况下打开另一个选项卡?
- 为什么我不能从Controller初始化程序访问HttpContext?
- 自SQL 2008升级以来,SqlDataReader.HasRows返回false