Я ищу способ расширить / внедрить код во время компиляции,
что-то вроде шаблонов / макросов / фрагментов ...
Допустим, я написал этот код во многих местах моего приложения:
[JsonObject("MyProperty")]
private string MyPropertyJson { get; set; }
public object MyProperty { get; set; }
Свойство MyPropertyJson используется только для целей сопоставления EF, поэтому я сохраняю значение в виде строки JSON в БД, но для пользователей класса они знают только о свойстве MyProperty.
Что я хочу сделать, так это то, что во время компиляции MyPropertyJson будет расширен до:
private string MyPropertyJson
{
get
{
return JsonConvert.SerializeObject(MyProperty);
}
set
{
MyProperty = JsonConvert.DeserializeObject(value);
}
}
Я хочу, чтобы это делалось только в выходных двоичных файлах, не затрагивая исходный код.
Я знаю о Unity, PostSharp, Aspect-Injector и т. Д., Но они не достигают того, что я хочу, потому что, используя их, я должен использовать некоторое отражение, чтобы найти и манипулировать MyProperty, но я хочу расширить его точно так же, как он был написан в том же классе с доступом ко всем внутренним компонентам класса.
Это похоже на фрагменты кода, но должно быть расширено на этапе компиляции.