假设我有一个名为 IFoo 的接口。
那么,wrapper.Bar()方法实际上执行的是这样的内容。
有没有一种简单清晰的方法来完成这个任务?
interface IFoo
{
int Bar();
int Bar2();
void VBar();
//etc,
}
我能创建一个包装器来接收任何IFoo对象,并在实际调用之前/之后执行一些操作吗?
例如,当我像这样做某事时:
IFoo wrappedFoo = new Wrapper<IFoo>(actualFooObject).Object;
wrappedFoo.Bar();
那么,wrapper.Bar()方法实际上执行的是这样的内容。
PreCall(); //some code that I can define in the wrapper
actualFooObject.Bar();
PostCall();
有没有一种简单清晰的方法来完成这个任务?
Wrapper<IFoo>
对我来说没有太多意义,因为你想要能够编写wrapper.Bar()
...所有这些方法必须在Wrapper<T>
中定义,但它们是T
特定的。对我来说,你需要让IFooWrapper
实现IFoo
,并为每个接口都这样做。这意味着要为所有Bar
方法编写相同的Precall(); object.Bar; Postcall()
,这并不简单和干净 :-) - Julián UrbanoT Object { get; }
属性来保持泛型性,类似于Moq
中的mock.Object
。 - Louis RhysIFoo wrappedFoo = new Wrapper<IFoo>(actualFooObject).Object;
,你只是忽略了包装器...wrappedFoo
只会指向原始对象! - Julián Urbano