[英]C# code expansion/injection in compile time
我正在尋找一種在編譯時擴展/注入代碼的方法,例如模板/宏/代碼段...
假設我在應用程序的很多地方都編寫了以下代碼:
[JsonObject("MyProperty")]
private string MyPropertyJson { get; set; }
public object MyProperty { get; set; }
MyPropertyJson屬性僅用於EF映射,因此我將值保存為DB中的JSON字符串,但對於類用戶,他們僅了解MyProperty屬性。
我想做的是在編譯時將MyPropertyJson擴展為:
private string MyPropertyJson
{
get
{
return JsonConvert.SerializeObject(MyProperty);
}
set
{
MyProperty = JsonConvert.DeserializeObject(value);
}
}
我希望僅在輸出二進制文件中完成此操作而不影響源代碼。
我了解Unity,PostSharp,Aspect-Injector等。但是它們無法實現我想要的功能,因為通過使用它們,我必須使用一些反射來查找和操作MyProperty,但我想像編寫它一樣完全擴展它在同一個班級中,可以訪問所有班級內部信息。
就像代碼片段一樣,但是要在編譯階段進行擴展。
通過編寫BeforeBuild msbuild目標來調用我開發來的外部控制台應用程序,我能夠達到我的要求:
它就像一個魅力:)
我正在為此任務使用通用引擎,完成后將其提交到github。
這是一種獲得所需內容的方法。
使用隱式運算符
例如,需要創建自己的json對象類,然后添加以下內容:
class JsonObject {
public object obj;
public static implicit operator string(JsonObject target) {
return Json.SerializeObject(target.obj);
}
}
但這並不能真正做到您真正想要的。 幾乎與創建新類和添加函數相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.