我有一个 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/