我从WCF服务获取对象。对象中的一个字段是NodaTime.IClock
类型的私有字段,称为timeProvider
,该字段主要用于依赖注入(通过构造函数重载)以在测试期间提供假时钟。
但是,我从WCF服务获取的实例将此字段设置为null,即使该类在字段声明和默认构造函数(私有)中显式初始化字段。
我认为将该字段作为数据合同的一部分是有道理的,但我不希望永远为空。我无法弄清楚它是如何设置为null的,代码中没有允许它的路径。
如何确保从WCF获取此字段时具有值?
[更新]
我在WCF文档中找到了这个:
在反序列化期间,首先创建一个未初始化的对象,而不调用该类型上的任何构造函数。然后对所有数据成员进行反序列化
这确实解释了为什么我的构造函数没有效果,但我很惊讶它甚至击败了字段初始化器。毕竟,我可能需要将此字段作为数据协定的一部分,或者在反序列化后找到初始化它的方法。
[更新2]
我发现了这个非常相似的问题Initialize private readonly fields after Deserializing因此我将自己的问题标记为重复。