为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 Func<> 属性/方法传递给 NancyFx Get() 方法?

如何将 Func<> 属性/方法传递给 NancyFx Get() 方法?

C#
白猪掌柜的 2021-11-21 16:32:14
NancyFx (2.x)NancyModule.Get()方法定义为:public virtual void Get(string path, Func<dynamic, object> action, [Func<NancyContext, bool> condition = null], [string name = null]);正常用法是:public class MyModule{    public MyModule()     {        this.Get("/", parameters => {            this.RequestHandler = new RequestHandler();            return this.RequestHandler.HandleRequest("/", parameters, someOtherInfo);        });    }}我想将第二个参数定义为一个属性,以便我可以用于多个路径,如下所示:public class MyModule{    Func<dynamic, object> indexHandler = parameters => {        // Error: Keyword "this" is not available in this context        this.RequestHandler = new RequestHandler();        // Error: Keyword "this" is not available in this context        return this.RequestHandler.HandleRequest("/", parameters, someOtherInfo);    };    public MyModule()     {        this.Get("/", indexHandler);        this.Get("/index", indexHandler);    }}如果我这样做,它会起作用:public class MyModule{    public MyModule()     {        Func<dynamic, object> indexHandler = parameters => {            this.RequestHandler = new RequestHandler();            return this.RequestHandler.HandleRequest("/", parameters, someOtherInfo);        };        this.Get("/", indexHandler);        this.Get("/index", indexHandler);    }}但我不想在构造函数中定义它。我究竟做错了什么?有没有其他方法可以做到这一点?
查看完整描述

2 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

这应该有效:


public class MyModule

{

    public MyModule() 

    {

       this.Get("/", IndexHandler);

       this.Get("/index", IndexHandler);

    }


    private object IndexHandler(dynamic parameters) {

        this.RequestHandler = new RequestHandler();

        return this.RequestHandler.HandleRequest("/", parameters, someOtherInfo);

    }

}



查看完整回答
反对 回复 2021-11-21
?
温温酱

TA贡献1752条经验 获得超4个赞

安德鲁的回答是有效的,应该已经足够了,但显然(在您的 MVCE 中)该方法定义不存在。


这是正确的定义(至少是 VS 想要的):


public virtual void Get(string path, Func<object, Task<object>> action, Func<NancyContext, bool> condition = null, string name = null)

幸运的HandleRequest是,您是可等待的,因此您只需要编辑返回类型。

这是正确的定义:


private Task<object> IndexHandler(dynamic parameters)

{

    this.RequestHandler = new RequestHandler();

    var someOtherInfo = "";

    return this.RequestHandler.HandleRequest("/", parameters, someOtherInfo);

}

希望这可以帮助!



查看完整回答
反对 回复 2021-11-21
  • 2 回答
  • 0 关注
  • 160 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信