Используйте Roslyn для динамической компиляции контроллеров - PullRequest
5 голосов
/ 21 октября 2011

С открытым исходным кодом Roslyn CTP мы можем попытаться придумать классные вещи, которые мы можем сделать с ним, кроме написания скриптов на c #.

Поскольку asp.net mvc позволяет вам создавать собственные фабрики контроллеров, можем ли мы написать фабрику, которая

  • Компиляция контроллеров из исходного файла на лету
  • Загрузить вновь созданный тип в среду выполнения (может ли среда выполнения обработать это?)
  • И отменять предыдущий тип, если предыдущие запросы для того же контроллера уже были сделаны

Это позволит нам быстро создавать прототипы или менять контроллеры, так как вы можете просто написать код, и фабрика контроллеров примет изменения без необходимости перекомпиляции.

Ответы [ 3 ]

5 голосов
/ 25 октября 2011

Несколько месяцев назад я уже реализовал контроллеры времени исполнения с использованием моноскомпилятора в качестве службы.

Информацию и ссылку на код на 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/

2 голосов
/ 21 октября 2011

Я не так много знаю о фабриках контроллеров MVC, но да, это звучит как нечто, что можно сделать. Шаг 2 может быть выполнен с помощью стандартного Assembly.Load () испускаемого кода. Roslyn также имеет возможность компилировать динамический метод, если это возможно, что еще легче.

Для связанного примера взгляните на прототип Razor view engine , который Дэвид Эббо собрал.

1 голос
/ 04 апреля 2013

Взгляните на ScriptCs . Я верю, что раньше будет возможно делать такие вещи.

...