2011-10-21 11 views
5

Roslyn CTP açıkken, C# komut dosyaları yazmanın dışında yapabileceğimiz harika şeyleri düşünmeye çalışabiliriz.Denetleyicileri dinamik olarak derlemek için Roslyn kullanın

asp.net mvc özel denetleyici fabrikaları yazmasına olanak tanır yana,

  • yükleyin yeni oluşturulan tip içinde on-the-fly

    • kaynak dosyadan denetleyicileri derler bir fabrika yazabilirim çalışma zamanına (çalışma zamanı? o işleyebilir)
    • Ve aynı kumanda önceki istekleri zaten

    Bu olur u verir yapılmış önceki türü geçersiz Kodları yazabildiğiniz gibi kontrolörlerin hızlı bir şekilde prototipini alması veya değiştirmesi ve kontrolörün yeniden derleme ihtiyacı olmadan değişiklikleri toplayabilmesi.

  • +2

    Bu Roslyn olmadan yapılabilir. – Ankur

    +0

    Orchard CMS'ye bir göz atın: bu, günümüzde kaynak koddan modülleri dinamik olarak yükler. –

    +0

    Orchard, csproj'u meclisleri yüklemeden önce derler, ancak bunu "biraz deneysel" olarak tanımlar: http://www.orchardproject.net/docs/Orchard-module-loader-and-dynamic-compilation.ashx – Thomas

    cevap

    5

    Zaten birkaç ay önce bir hizmet olarak monos derleyicisini kullanarak çalışma zamanı denetleyicilerini uygulamış durumdayım.

    Burada üzerinde github koduna Infos ve link bulabilirsiniz: http://www.fusonic.net/en/blog/2011/04/01/scripting-asp-net-mvc-controllers-at-runtime/

    o başında gerçekten güzel görünüyor olsa da, çünkü birçok sınırlamaları gerçek dünyada süper kullanışlı değildir.

    Her şeyden önce Visual Studio, kodunuzu değiştirirken kesinlikle kilitlendiği ve kaynak kodunu değiştirmeyi yasakladığı için ortada ve kodunuzun tam ortasında duruyor. Bu yüzden, kaynak dosyalarınızı düzenlemenin tek yolu, bir hata ayıklayıcısı eklenmeden çalıştırılmaktır. İkinci problem, (belli ki) kontrolörlerle sınırlı olmasıdır. Denetleyicilerinizi çalışma zamanında düzenlemeye başlar başlamaz, gerçek bir komut dosyası ortamı istersiniz! Örneğin, Modellerinizi ve Hizmetlerinizi ve projenizde çalışma zamanında sahip olduğunuz kodu değiştirin.

    Sonra size dinamik kod ve hata ayıklama yapamam sorun var vb ...

    Ben sadece tam bir çözüm değildir çünkü birkaç gün sonra bırakmış kullanıcıları

    . Tüm mvc-projesinin çalışma zamanında dinamik olarak derlenebildiği, (gerçek bir betik çerçevesi gibi) denetleyicilerle sınırlı olmayan ve hata ayıklama dahil olmak üzere .net için bir çözüm hayal ediyorum.

    +0

    Yani bu mümkündür, ancak birlikte çalışmak uygun değildir. – Thomas

    +0

    Asp mvc 3 projemde bunu yapmak için mono kullanıyorum. Projeniz büyük olduğunda gerçekten zaman kazandıran bir yaklaşımdır. – lontivero

    2

    MVC denetleyici fabrikaları hakkında çok fazla şey bilmiyorum, ancak evet, yapılması gereken bir şey gibi geliyor. Adım 2, yayınlanan kodun standart Assembly.Load() ile yapılabilir. Roslyn ayrıca, eğer mümkün ise, daha da hafif olan bir dinamik metodu derleme yeteneğine de sahiptir.

    ilgili Örneğin, David Ebbo araya prototip Razor view engine bakabilirsiniz.

    +0

    Bir scriptleti dinamik bir yönteme dönüştürmekle tam olarak nasıl giderim? –