2011-10-21 18 views
5

Po uruchomieniu Roslyn CTP możemy spróbować wymyślić fajne rzeczy, które możemy z nim zrobić, poza pisaniem skryptów w języku C#.Używanie Roslyn do dynamicznego kompilowania kontrolerów

Ponieważ asp.net mvc pozwala na pisanie na zlecenie fabryki kontrolera, moglibyśmy napisać fabrykę że

  • kompiluje kontrolerów z pliku źródłowego on-the-fly
  • Załaduj nowo utworzony typu w do wykonywania (runtime można sobie z tym poradzić?)
  • I nadrzędne w stosunku do poprzedniego typu, jeżeli wcześniejsze wnioski o tym samym kontrolerze zostały już wykonane

To byłoby pozwala u s do szybkiego prototypowania lub zmiany kontrolerów, jak możesz po prostu napisać kod i kontroler będzie mógł pobrać zmiany bez potrzeby ponownej kompilacji.

+2

Można to zrobić bez Roslyn. – Ankur

+0

Spójrz na Orchard CMS: dynamicznie ładuje moduły z kodu źródłowego już dziś. –

+0

Orchard robi to przez kompilowanie csproj przed załadowaniem zespołów, ale opisuje go jako "nieco eksperymentalny": http://www.orchardproject.net/docs/Orchard-module-loader-and-dynamic-compilation.ashx – Thomas

Odpowiedz

5

Mam już zaimplementowane kontrolery runtime przy użyciu kompilatora monos jako usługa kilka miesięcy temu.

można znaleźć infos i link do kodu na github tutaj: http://www.fusonic.net/en/blog/2011/04/01/scripting-asp-net-mvc-controllers-at-runtime/

Choć wygląda bardzo ładne na początku, to nie jest to, że bardzo przydatne w rzeczywistym świecie, ponieważ z kilku ograniczeń.

Przede wszystkim Visual Studio stoi pośrodku ciebie i twojego kodu, ponieważ ściśle blokuje i zabrania zmiany kodu źródłowego podczas debugowania. Tak więc jedynym sposobem edycji plików źródłowych jest uruchomienie bez dołączonego debuggera.

Drugi problem polega na tym, że jest (oczywiście) ograniczony do kontrolerów. Jak tylko zaczniesz edytować kontrolery w środowisku wykonawczym, potrzebujesz prawdziwego środowiska skryptowego! Na przykład, aby zmienić modele i usługi oraz dowolny kod, który masz w swoim projekcie w środowisku wykonawczym.

Wtedy masz problem, że `t debugowania kodu dynamicznego i tak dalej ...

ja przestałem używać go po kilku dniach, bo to nie tylko kompletne rozwiązanie. Marzy mi się rozwiązanie dla .net, w którym cały projekt mvc może być dynamicznie kompilowany w czasie wykonywania, nie ograniczając się do kontrolerów (takich jak prawdziwy framework skryptowy) i włączając w to debugowanie.

W java-świecie istnieje rozwiązanie tego problemu: http://zeroturnaround.com/jrebel/

+0

Jest to możliwe, ale po prostu nie jest wygodnie pracować. – Thomas

+0

Używam mono, aby to zrobić w moim projekcie asp mvc 3. To naprawdę czasochłonne podejście, gdy twój projekt jest duży. – lontivero

2

Nie wiem zbyt wiele o fabrykach kontrolerów MVC, ale tak, to brzmi jak coś, co można zrobić. Krok 2 można wykonać za pomocą standardowego Assembly.Load() emitowanego kodu. Roslyn ma również możliwość kompilacji do metody dynamicznej, jeśli to możliwe, co jest jeszcze mniejszą wagą.

Dla pokrewnego przykładu przyjrzyj się prototypowi Razor view engine opracowanemu przez Davida Ebbo.

+0

Jak dokładnie mam zamiar przekształcić skryptlet w dynamiczną metodę? –

1

Spójrz na ScriptCs. Wierzę, że wcześniej będzie można robić takie rzeczy.

Powiązane problemy