【发布时间】:2014-07-07 22:09:33
【问题描述】:
我有一个看起来像这样的 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 模块中使用成员变量,如果可以,怎么做?我可能遗漏了一些明显的东西!
在创建设置等方面没有抛出异常,我可以在课堂的其他地方使用它,只是不能在 Lambdas 中使用。该类也是线程安全的,我只是没有将它添加到上面的示例中。
【问题讨论】:
-
这是您唯一一次为
mSettings字段赋值吗? -
@Dirk 在实际代码中,mSettings 只是在 GET 中真正被读取,它的设置在其他地方填充,但是它们可以在类中的其他地方访问,并且值符合预期。该类是线程安全的,因此据我所知,它不是数据竞争。当我尝试从 GET 访问时,该类的任何成员变量都为 null 或默认值。因此,为什么我认为它与捕获“this”有关
-
@BenJ 不确定这会有什么帮助。上面的场景很幼稚,因为它创建了对象的本地副本。真正的代码从构造函数的其他地方收集信息,然后创建对象的副本。因此,我不能将设置作为参数传递,因为成员设置为空(根据 GET)
-
捕获
mSettings没有问题。如果它在 lambda 表达式中是null,那么它要么从未被赋值,要么已被赋值给null。您可以通过设置字段readonly来检查您是否不小心为其分配了另一个值,这样只有构造函数可以写入它,如果其他方法尝试这样做,您会得到编译时错误。 -
@YuvalItzchakov 我发现 Nancy 模块在每次调用时都会重建,即它们无法保留状态信息。我将不得不在其他地方维护状态并在需要时调用它。无论如何感谢您的帮助