2011-03-30 56 views
1

編譯動態對象我寫一個應用程序,允許用戶超過對象的集合計算值來創建自定義算法。簡而言之,我將通過一種方法使用類的源代碼的字符串。如何管理創建/在.NET 4.0中

我已經實現該解決方案是編譯字符串源代碼中爲每個這樣的自定義算法一個單獨的DLL,然後使用Assembly.Load加載它們並實例保存在DLL中的類。從可維護性的角度來看,這意味着我必須將源代碼存儲在數據庫中(例如),並管理編譯後的dll的存在(如果缺失,則通過再次編譯源代碼來重新創建)

考慮到.NET 4.0的新特性,是否有更好的方法來做到這一點?

編輯: 輸入源代碼是C#,我使用CSharpCodeProvider編譯代碼。自定義類都是從基類派生的,它們覆蓋實際上保存計算邏輯的方法。我真的很想做的是擺脫DLL管理的同時不失去(太多)性能編譯所有的類,每次我的應用程序啓動時

回答

2

我想看看腳本語言; IronPython很容易嵌入,或者有.NET的JavaScript引擎。簡單,並且通常夠快。


如果(評論)你需要使用C#,我想:

  • 構建所有在同一時間在一個組件的電流的方法;解決了很多問題
  • 如果在執行過程中的數據變化,使用的AppDomain的,這樣我可以卸載它們

我已經做了類似的東西在模型/規則是XML,通過變換運行它獲取c#,並用CSharpCodeProvider(或其他)編譯;並簡單地輪詢每分鐘左右,看是否有新版本需要

+0

的要求是,源代碼中的用戶提供爲C#。 – anchandra 2011-03-30 21:27:53

+0

@anchandra - k;將編輯 – 2011-03-30 21:32:41

+0

我認爲你可以直接編譯到內存中的程序集。所以你不需要在磁盤上管理它們。 – CodesInChaos 2011-03-30 21:43:55

1

的CSharpCodeProvider已經存在了一段時間,並應符合票。它可以用來像你一直在做的那樣生成單獨的庫(也許你正在使用CSharpCodeProvider),但它也可以用來生成動態類對象。如果他們都實現了一個接口,你可以把對象轉換爲一個接口,或者你可以使用反射來調用你的邏輯。這裏是一個CodeProject上的文章,以實現類似的東西:

http://www.codeproject.com/KB/dotnet/dynacodgen.aspx

相關問題