通用委托钩子

时间:2017-04-19 12:07:47

标签: c# delegates

我有一个包含Jint引擎的通用函数框架(在JavaScript中提供C#函数用法)。 C#函数是这样注册的(LOG函数注册的例子):

    private void RegisterUtils()
    {
        this.RegisterFunction("LOG", new Action<int, object>((level, message) =>
        {
            Logger.WriteLine(level, message);
        }));
        //....
    }

    /// <summary>
    /// Register framework function.
    /// </summary>
    /// <param name="name"></param>
    /// <param name="body"></param>
    internal void RegisterFunction(string name, Delegate body)
    {
        this.JintEngine.SetValue(name, body);
    }

我可以假设委托总是Action或Func。

我想在RegisterFunction中向逻辑添加逻辑(例如在上下文对象中保存名称)。

看起来委托有一个名为invokation list的东西。我试过这个:

Delegate.Combine(new Action(() => { /*logic here*/ }), body)

但得到了#34; ArgumentException:代理必须属于同一类型。&#34;使用该类型创建新委托需要具有与signarute匹配的功能,这是动态不可能的。

我已经看过其他问题,比如this,还有一个MSDN page谈论挂钩事件(在WinForms等等),但为此我需要抛出事件的类型(它似乎是一种真正的方法。

是否无法向委托本身添加简单的操作?或以某种方式包装它?

0 个答案:

没有答案