【发布时间】:2018-09-08 05:54:40
【问题描述】:
我正在寻找一种在编译时扩展/注入代码的方法, 类似模板/宏/sn-ps...
假设我在应用程序的很多地方都编写了这段代码:
[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,但我想完全像它是在同一个类中编写的,可以访问所有类内部。
它与代码 sn-ps 完全相同,但在编译阶段需要扩展。
【问题讨论】:
-
您的用例是什么?您想在 json 中存储的日期是否不同?只是为了更好地了解可能的解决方案..
-
这对很多可能性都是开放的,实际上不是专门的 json 示例 :) 它是很多东西的通用解决方案,例如 - 横切关注点(日志记录、异常处理等)。 )这将是一种以纯粹的方式(对我而言)没有运行时编织器或使用反射的代码冗余解决方案。没有具体的场景,因为我正在尝试为这个代码注入任务构建一个通用引擎,以便分布在许多团队中。
-
我也一直在研究通用解决方案,我还没有遇到这种可能性。
标签: c# .net code-injection