5

随着 Roslyn CTP 的公开发布,我们可以尝试思考可以用它做的很酷的事情,而不是编写 c# 脚本。

由于 asp.net mvc 允许您编写自定义控制器工厂,我们可以编写一个工厂吗?

  • 即时从源文件编译控制器
  • 将新创建的类型加载到运行时(运行时可以处理吗?)
  • 如果先前对同一控制器的请求已经发出,则否决先前的类型

这将允许我们快速原型化或更改控制器,因为您可以简单地编写代码,并且控制器工厂将获取更改而无需重新编译。

4

3 回答 3

5

几个月前,我已经使用 monos 编译器作为服务实现了运行时控制器。

您可以在这里找到 github 上的信息和代码链接:http ://www.fusonic.net/en/blog/2011/04/01/scripting-asp-net-mvc-controllers-at-runtime/

虽然一开始看起来很不错,但由于一些限制,它在现实世界中并不是很有用。

首先,Visual Studio 位于您和您的代码中间,因为它严格锁定并禁止在调试时更改源代码。因此,编辑源文件的唯一方法是在不附加调试器的情况下运行。

第二个问题是它(显然)仅限于控制器。一旦您开始在运行时编辑控制器,您就需要一个真正的脚本环境!例如,在运行时更改您的模型、服务以及项目中的任何代码。

然后你有问题,你不能调试你的动态代码等等......

几天后我停止使用它,因为它不是一个完整的解决方案。我梦想有一个 .net 的解决方案,其中整个 mvc 项目可以在运行时动态编译,不限于控制器(如真正的脚本框架),包括调试。

在 java-world 中有一个解决方案:http: //zeroturnaround.com/jrebel/

于 2011-10-24T20:22:01.827 回答
2

我对 MVC 控制器工厂了解不多,但是是的,这听起来像是可以做的事情。步骤 2 可以使用已发出代码的标准 Assembly.Load() 来完成。如果可能的话,Roslyn 还可以编译成动态方法,它的重量更轻。

有关相关示例,请查看David Ebbo 组装的原型Razor 视图引擎。

于 2011-10-21T15:36:40.243 回答
1

看看ScriptCs。我相信很快就有可能做这样的事情。

于 2013-04-04T08:32:04.303 回答