我已经编写了一个ASP MVC应用程序的插件解决方案基于本网站上的建议,但是,我已经到了一个障碍,并希望得到一些帮助。不用太深入了解插件系统的工作原理,它会成功加载控制器并找到适当的视图 - 问题在于视图无法编译,因为它无法解析所有插件的引用(插件DLL引用了其他主机应用程序不知道的DLL)。添加引用到ASP MVC页面编译引擎
我在CurrentDomain上使用AssemblyResolve,但在默认BuildManager编译视图时未调用,而是从web.config部分获取程序集列表。如果我将所有插件文件添加到GAC并在该部分中添加引用 - 它工作正常。但是,如果我必须为每个插件更改web.config,那么这会破坏拥有插件系统的目的。
小插图来解释这个问题: Plugin.dll --references - > PluginServices.dll
URL http://mysite.com/some/index MVC应用--load - > Plugin.dll PASS
MVC应用程序--load - > Plugin.SomeController PASS
MVC应用--find - >插件\视图\一些\的Index.aspx PASS
MVC应用--compile - >的Index.aspx FAIL(第e查看使用来自PluginServices的一种无法找到的类型)
有没有一种方法可以动态地添加对BuildManager的引用,以便编译通过而不会改变web.config?
在此先感谢!
感谢您的回复,但这并没有真正的工作,因为问题是当ASP试图实际呈现页面并解析引用时,它无法找到关联的DLL。 – Gil 2009-06-04 00:09:57
如果您没有可用插件接口的实现(即使它只是一个存根或单元测试模拟),您如何期望应用程序运行? – 2009-06-04 01:23:53
该实现是在运行时交付给插件的另一个程序集。插件只知道它使用的对象的接口,以及服务层在运行时使用真实对象的子接口。问题是当主机应用程序在插件中呈现视图时,它无法解析接口名称。 – Gil 2009-06-04 02:18:57