有没有“;注入“;将带有反射的代码转换为静态类
本文关键字:代码 转换 静态类 反射的 注入 有没有 | 更新日期: 2023-09-27 17:57:27
我正在努力使缓存代理类的创建尽可能简单。我已经用一个简单的API做了几个不同的实验,但这并不是那么容易。
现在,我正在研究属性和反射,看看它是否可以"神奇地"解决。例如,给定这个类:
public static MyCache
{
[Cache("foobar")]
public static string Foobar { get; set; }
}
让它以某种方式生产出相当于的产品
public static MyCache
{
[Cache("foobar")]
public static string Foobar
{
get
{
return (string)Cacher.Get("foobar");
}
set
{
Cacher.Set("foobar", value, new CacheOptions()); //or whatever
}
}
}
虽然这两个版本对调用者来说都应该看起来"正常",这样才是有效的:
MyCache.Foobar="meh";
Assert.IsEqual("meh", MyCache.Foobar);
有什么可以让我反思的东西可以让这样的作品成功吗?
有什么可以让我反思的东西可以让这样的作品成功吗?
不,没有什么可以实现的,尤其是如果房产不是虚拟的。如果属性是虚拟的,您可以使用像Castle.DynamicProxy这样的框架来进行面向方面编程。Rhino Mocks和NSubstitute等流行的mocking框架使用它来生成运行时代理对象。当然,这只适用于虚拟成员。在您展示的示例中,您有一个无法编织的静态属性。
您可以使用诸如PostSharp
之类的编译后处理工具来实现这一点。它们通过修改生成的IL来工作。