如果不存在则生成方法

Use*_*ser 3 c# methods proxy dynamic

上下文

我有一个带有方法的C#类PyroProxycall(string method, params object[] arguments)

public class PyroProxy : IDisposable {

    public object call(string method, params object[] arguments)
}
Run Code Online (Sandbox Code Playgroud)

这是远程对象的proxist类.

动机

始终使用call方法在代码中看起来不太好.

假设PyroProxy类没有方法test_method().如何使以下代码有效?

PyroProxy p = new PyroProxy();
p.test_method();
Run Code Online (Sandbox Code Playgroud)

test_method看起来像的代码

public object test_method(params object[] arguments) {
    return call("test_method", arguments); // you get the point
}
Run Code Online (Sandbox Code Playgroud)

这可能是我没有找到的重复,也许在编译时或运行时可能.我能做些什么才能更接近这个目标?提示非常感谢.有关如何注入方法的答案.我找到了ExpandoObject,但它并没有告诉我如何创建未知方法.

dca*_*tro 6

您应该派生自然DynamicObject后覆盖该TryInvokeMember方法.

public class PyroProxy : DynamicObject
{
    public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
    {
        Console.WriteLine(binder.Name + " was invoked");
        result = call(binder.Name, args);
        return true;
    }
}

dynamic proxy = new PyroProxy();
proxy.SomeMethod(); //prints "SomeMethod was invoked"
Run Code Online (Sandbox Code Playgroud)