是否有一个.NET库,可以发出.NET代码来创建代理类型?

问题描述

| 观察以下代码片段:
  public class SomeType
  {
    public SomeType2 X { get; set; }
    public int Y { get; set; }
  }

  public class SomeType2
  {
    public string Z { get; set; }
  }

  public class SomeTypeSurrogate
  {
    public static implicit operator SomeTypeSurrogate(SomeType obj) { return new SomeTypeSurrogate { X = obj.X,Y = obj.Y }; }
    public static implicit operator SomeType(SomeTypeSurrogate surrogate) { return new SomeType { X = surrogate.X,Y = surrogate.Y }; }
    public SomeType2Surrogate X { get; set; }
    public int Y { get; set; }
  }

  public class SomeType2Surrogate
  {
    public static implicit operator SomeType2Surrogate(SomeType2 obj) { return new SomeType2Surrogate { Z = obj.Z }; }
    public static implicit operator SomeType2(SomeType2Surrogate surrogate) { return new SomeType2 { Z = surrogate.Z }; }
    public string Z { get; set; }
  }
我的问题是存在一个.NET库,它可以生成代理类型,如示例中给定的“真实”类型以及属性(必须在代理中找到)的示例中那样。 例如,一个虚构的代码可能看起来像这样(我受到protobuf-net的RuntimeTypeModel的启发):
var model = new TypeSurrogateModel();
model.SetSurrogateNameScheme(SurrogateNameScheme.AddSuffix,\"Surrogate\");
model.AddType(typeof(SomeType),\"X\",\"Y\");
model.AddType(typeof(SomeType2),\"Z\");
model.Compile(\"Surrogates.dll\");
...
var model = new TypeSurrogateModel();
model.AddAssembly(\"Surrogates.dll\");
SomeType obj = GetSomeTypeInstance();
object surrogate = model.GetSurrogate(obj);
Debug.Assert(surrogate.GetType().Name == \"SomeTypeSurrogate\");
要么 在使用代理创建装配之前:
var model = new TypeSurrogateModel();
model.SetSurrogateNameScheme(SurrogateNameScheme.AddSuffix,\"Z\");
model.GenerateSource(\"Surrogates.cs\");
创建并编译Surrogates.cs之后,轮到以常规类型安全的方式使用它的程序集:
SomeType obj = GetSomeTypeInstance();
SomeTypeSurrogate surrogate = obj;
    

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...