捕捉这个'在Nancy Lambda Capture

时间:2014-07-07 12:37:49

标签: c# lambda nancy

我有一个看起来像这样的Nancy模块

public class Configurer : NancyModule
{
    private Settings mSettings;

    public Configurer()
    {
        mSettings = new Settings();

        Get["/"] = parameters =>
        {
            // Do something with mSettings here
            mSettings.Name = new string("blah");
            // and then return a response
            return Response.AsJson<Settings>(mSettings);.
        };
    }
}

我遇到的问题是mSettings总是null(我假设是因为我没有在lamdba闭包中捕获this。我已尝试在闭包中传递此内容但是这是行不通的)。我也试过使用参数动态字典,但也失败了。是否可以在南希模块中使用成员变量,如果可以,如何才能完成?我可能错过了一些明显的东西!

没有关于创建设置等的异常,我可以在课堂的其他地方使用它,而不是在Lambdas中。该类也是线程安全的,我只是没有将它添加到上面的例子中。

1 个答案:

答案 0 :(得分:2)

事实证明,在每次呼叫南希路线(GET等)时,都会构建一个新版本的南希模块。因此,寿命仅与该单个呼叫一样长。这意味着在定义Nancy路由之前,必须在构造函数中构造任何成员变量。

这样做的缺点是你不能在课堂的其他地方修改或保持状态。因此,有必要将状态信息保存在其他位置,并提供从Nancy模块检索它的接口。

上面的示例将按预期工作(因此不是最好的示例)但是在我的实际用例中mSettings在另一个方法中填充在类的其他地方,并且只在Nancy路由中读取,到时为止状态无效。