我已经看到大量的开源框架在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);
我想在我假装的例子中,它会将异常投掷存根放入我没有提供的其他属性的设置者中......
答案 0 :(得分:1)
请参阅此example。通过使用Reflection,您可以避免在实现中指定每个可能的Type,但是您还有其他缺点:
owner参数不公开函数所需的任何Type-information。您需要手动检查它们。 反射开销会降低每次调用的性能。 反射降低了可维护性(该方法必须实现不同)。 一些操作(如Indexers)很难处理Reflection.In静态类型语言如C#,类的接口定义了支持哪些操作。受支持的操作可能是调用具有指定签名的方法,或获取或设置属性,或者能够附加到特定事件。在大多数情况下,这是完全合理的,因为编译器能够验证指定类型是否支持这些操作。
答案 1 :(得分:1)
我有一个开源框架ImpromptuInterface(在nuget中),给定一个接口,将生成存根到DLR调用(recursively even)。这意味着您可以使用DynamicObject的实现添加您喜欢的任何逻辑。