有没有“;注入“;将带有反射的代码转换为静态类

本文关键字:代码 转换 静态类 反射的 注入 有没有 | 更新日期: 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来工作。