随着Roslyn CTP的公开发布,除了编写c#脚本之外,我们可以尝试用它来思考我们可以做的很酷的事情。
由于asp.net mvc允许你编写自定义控制器工厂,我们可以写一个工厂
这将允许我们快速原型化或更改控制器,因为您可以简单地编写代码,而controllerfactory将在不需要重新编译的情况下获取更改。
答案 0 :(得分:5)
几个月前,我已经使用monos编译器作为服务实现了运行时控制器。
您可以在此处找到信息并链接到github上的代码:http://www.fusonic.net/en/blog/2011/04/01/scripting-asp-net-mvc-controllers-at-runtime/
虽然它在开始时看起来非常好,但由于存在一些限制,它在现实世界中并不是非常有用。
首先,Visual Studio位于您和您的代码中间,因为它严格锁定并禁止在调试时更改源代码。因此,编辑源文件的唯一方法是在没有附加调试器的情况下运行。
第二个问题是它(显然)仅限于控制器。一旦在运行时开始编辑控制器,就需要一个真正的脚本环境!例如,在运行时更改模型,服务以及项目中的任何代码。
然后你就遇到了无法调试动态代码等问题......
几天后我停止使用它,因为它不是一个完整的解决方案。 我梦想着.net的解决方案,整个mvc项目可以在运行时动态编译,不仅限于控制器(如真正的脚本框架),还包括调试。
在java世界中有一个解决方案:http://zeroturnaround.com/jrebel/
答案 1 :(得分:2)
我对MVC控制器工厂了解不多,但是,听起来好像可以做到。可以使用发出的代码的标准Assembly.Load()完成步骤2。如果可能的话,Roslyn还能够编译成动态方法,重量更轻。
有关相关示例,请查看David Ebbo汇总的原型Razor view engine。
答案 2 :(得分:1)
看看ScriptCs。我相信很快就可以做到这样的事情。