是否有任何实用程序可以动态生成在运行时实现接口的对象?

时间:2013-02-10 10:22:49

标签: c# dynamic

我已经看到大量的开源框架在C#中实现动态编程。是否有一个可以生成接口的实现而没有任何实际的具体类?

具体来说,假设你有:

interface IThing {
  int Id { get; set; } 
  string Name { get; set; }
}

您还有想要映射到IThing实例的对象:

class Foo {
  public int FooBarId { get; set; }
  public string FooBarName { get; set; }
}

我的假设助手会让我写下像:

IThing concreteThing = helper.Implement<IThing, Foo>()
  PropertyGetter(x => x.Id).Returns(foo => foo.FooBarId)
  PropertyGetter(x => x.Name).Returns(foo => foo.FooBarName);

我想在我假装的例子中,它会将异常投掷存根放入我没有提供的其他属性的设置者中......

2 个答案:

答案 0 :(得分:1)

请参阅此example。通过使用Reflection,您可以避免在实现中指定每个可能的Type,但是您还有其他缺点:

owner参数不公开函数所需的任何Type-in​​formation。您需要手动检查它们。 反射开销会降低每次调用的性能。 反射降低了可维护性(该方法必须实现不同)。 一些操作(如Indexers)很难处理Reflection.In静态类型语言如C#,类的接口定义了支持哪些操作。受支持的操作可能是调用具有指定签名的方法,或获取或设置属性,或者能够附加到特定事件。在大多数情况下,这是完全合理的,因为编译器能够验证指定类型是否支持这些操作。

答案 1 :(得分:1)

我有一个开源框架ImpromptuInterface(在nuget中),给定一个接口,将生成存根到DLR调用(recursively even)。这意味着您可以使用DynamicObject的实现添加您喜欢的任何逻辑。