我有一些不实现特定接口(interface)但在结构上符合该接口(interface)的类。
interface IFoo {
void method();
}
class Bar { // does not implement IFoo
public void method() {...}
}
现在,我可以围绕那些简单地委托(delegate)给包装类的类编写一个包装器
class BarWrapper : IFoo {
Bar bar = new Bar();
public void method()
{
bar.method();
}
}
但这是一项繁琐的工作。这些包装类可以以某种方式自动生成吗?像这样的东西:
IFoo foo = CreateWrapper<IFoo>(new Bar());
我确定您可以使用 Reflection.Emit 做到这一点,但我从未使用过它,乍一看它看起来并不容易。
有没有更简单的方法或者是否有一个库已经实现了这个?
最佳答案
您要完成的任务称为鸭式输入。 有一些专门的库可以让你这样做,尽管我没有使用过它们中的任何一个。
只需很少的努力(和一些思考),您就可以使用 CaSTLe Dynamic Proxy 来做到这一点,使用概述的方法 here .
如果出于某种原因,基于拦截器的方法对您来说 Not Acceptable 动态代理不支持开箱即用的方法(目前),但如果您使用 2.2 beta 版,则可以很容易地以强大的方式提供该方法类型化的方式(不使用拦截器),通过提供您自己的代理类型构建器(看看 mixin 是如何实现的)。
关于c# - 自动创建一个包装器来实现一个接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1920222/