gap*_*gap 12 c# dynamic-proxy dynamicobject c#-4.0
我可以定义一个派生自DynamicObject并支持接口(ICanDoManyThings)的类,而无需在接口中实现每个方法吗?
我正在尝试创建一个动态代理对象,并希望通过MyProxyClass.TryInvokeMember的实现来处理此类上的方法调用,这可能会也可能不会将它们传递给包装对象.
这可能吗?
谢谢
jbt*_*ule 10
ImpromptuInterface正是这样做的,它适用于任何IDynamicMetaObjectProvider,包括DynamicObject子类和ExpandoObject.
using ImpromptuInterface;
using ImpromptuInterface.Dynamic;
public interface IMyInterface{
string Prop1 { get; }
long Prop2 { get; }
Guid Prop3 { get; }
bool Meth1(int x);
}
Run Code Online (Sandbox Code Playgroud)
...
//Dynamic Expando object
dynamic tNew = Build<ExpandoObject>.NewObject(
Prop1: "Test",
Prop2: 42L,
Prop3: Guid.NewGuid(),
Meth1: Return<bool>.Arguments<int>(it => it > 5)
);
IMyInterface tActsLike = Impromptu.ActLike<IMyInterface>(tNew);
Run Code Online (Sandbox Code Playgroud)
Linfu实际上不会使用基于DLR的对象,而是使用它自己的天真后期绑定,这给它带来了严重的性能成本.Clay确实使用了dlr,但你必须坚持使用Clay对象,这些对象是为了将所有行为注入到ClayObject中而不是总是直截了当的.