c# - 在 Nancy Lambda Capture 中捕获 'this'

标签 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。我尝试过在闭包中传递它,但它不起作用)。我也尝试过使用参数动态字典,但也失败了。是否可以在 nancy 模块中使用成员变量,如果可以,该怎么做?我可能错过了一些明显的东西!

关于设置等的创建不会引发任何异常,我可以在类中的其他地方使用它,但不能在 Lambda 中使用。该类也是线程安全的,我只是没有将其添加到上面的示例中。

最佳答案

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

这样做的缺点是您无法修改或保留类中其他位置的状态。因此,有必要将状态信息保存在其他地方,并提供一个接口(interface)来从 Nancy 模块检索它。

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

关于c# - 在 Nancy Lambda Capture 中捕获 'this',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24610804/

相关文章:

c# - 事务不在 C# 中回滚

c# - Entity Framework 、外键约束可能会导致循环或多条级联路径

c# - 在 NancyFx 中向响应添加位置 header 的正确方法

configuration - 使用Fluent验证配置NancyFx

c# - Nancyfx Request.Session 不持有 AJAX 帖子的值

c# - 使用 Python 与 C# 创建 PPT 演示文稿

c# - LINQ to XML - 如何获取索引

c# - Func<TResult> 方法参数的首选命名约定是什么?

java - 在嵌套对象上使用 lambda 和流

c++ - Lambda 隐式捕获因结构化绑定(bind)声明的变量而失败