我敢肯定這是一個非常奇怪的要求,但這裏。如何從ASP.NET MVC網站內生成可下載的C#類?
我們有一些客戶配置代碼,由我們編譯到類庫中的C#類表示。創建這些配置類目前是我希望分配給除開發人員以外的其他人的猴子工作。因此,我們構建了一個「配置器」網站,業務分析師可以通過填寫表格並選擇相關選項來生成有效的C#類。
從MVC網站的模板生成C#類的最佳方式是什麼?請注意,我不是在說動態生成並在運行時執行類:我們本質上是生成一個文本文件,它恰好包含將包含在完全不同的項目中的C#代碼。
這被證明是一個非常困難的話題谷歌正確!選項都拿出了那麼遠,
- 只使用一個標記化的文本文件,並使用的String.Format 替換值
- 以某種方式使用剃刀作爲一個模板引擎(但不知道怎麼了,它不是HTML我們「重新生成)
- 以某種方式使用T4模板(至少我知道它是用來生成C#,但不知道如何在運行時執行)
就如何最好地處理這個任何想法?
按照要求,這裏是一個輸出類/文件的例子。這裏的值覆蓋了基類中設置的值,這些值使用特定於客戶的標籤,驗證等。這就是我們如何爲客戶定製產品的方法。
public class AreaRiskTemplate: AreaRiskTemplateBase
{
public override string EntityName { get { return "risk"; } }
public override string EntityNamePlural { get { return "risks"; } }
public override string EntityNameArticle { get { return "a"; } }
public override string CGovItemRefPrefix { get { return "R"; } }
public override void SetFieldDefinitions()
{
FieldDefinitions.Level1.IsImplemented = true;
FieldDefinitions.Level1.Label = "Category";
FieldDefinitions.Level1.IsVisibleInGrid = true;
FieldDefinitions.Level2.IsImplemented = true;
FieldDefinitions.Level2.Label = "Team";
FieldDefinitions.Level2.IsVisibleInGrid = true;
FieldDefinitions.Description.IsImplemented = true;
FieldDefinitions.Description.Label = "Description";
FieldDefinitions.Description.IsVisibleInGrid = true;
}
public override ModelStateDictionary Validate()
{
var msd = new ModelStateDictionary();
// add template-specific validation here
msd.Merge(base.Validate());
return msd;
}
public override List<string> Level1Options
{
get
{
return new List<string>
{
"Organisational",
"Financial",
"Operational",
"External",
"IT"
};
}
}
}
更新:目前正在研究T4模板http://msdn.microsoft.com/en-us/library/ee844259(v=vs.100).aspx(感謝下面的評論)。看起來很有希望。
http://msdn.microsoft.com/en-us/library/bb126445.aspx似乎包含有關在運行時開始使用T4的詳細信息。 –
這也可能是有趣的:http://code.msdn.microsoft.com/windowsdesktop/Single-File-Generator-94d856d4 – Magrangs
你能發佈一個這個配置文件的樣子嗎? –