如果只有一个属性发生更改,则不会触发.Net C#中自定义类的单例设置程序
本文关键字:自定义 Net 程序 设置 单例 属性 有一个 如果 | 更新日期: 2023-09-27 17:59:45
我有这个类
public class SPP {
static PPModel PP= null;
public PPModel sPP
{
set
{
if (PP != value)
{
PP = value;
//save PP in database
}
}
get
{
if (PP == null)
{
//lazy loading of PP
}
return PP;
}
}
}
public class PPModel
{
public string property1 { get; set; }
public int property2 { get; set; }
public int property3 { get; set; }
public int property4 { get; set; }
public Dictionary<string, int> property5 { get; set; }
}
现在,如果我以这种方式设置sPP,一切都很好:
SSP.Instance.sPP = new PPModel(){...};
但我想知道是否有可能只更新这个singleton的一个属性并以这种方式触发setter:
SSP.Instance.sPP.property4 = 7;
如果我这样做,singleton sPP有更新的值,但setter似乎没有被触发,这意味着像数据库保存这样的额外代码将不起作用。
有机会让它发挥作用吗?
提前谢谢。
一个很好的解决方案是将模型更改为具有完整的属性定义,并在setter上调用DB更新,例如:
public class PPModel
{
private string _fieldOne;
public string Property1
{
get { return _fieldOne; }
set
{
_fieldOne = value;
// update DB
}
}
private int _field2;
public int Property2
{
get { return _field2; }
set
{
_field2 = value;
// update DB
}
}
// and so on for all properties
}
您不能通过更新内部存储对象属性来触发单例中的setter。
你可以这样触发你的设置:
SSP.Instance.sPP = new PPModel(){...};
var instance = SSP.Instance.sPP;
instance.property4 = 7
SSP.Instance = instance;
通过这种方式,您将重置实例的确切变量并触发更新。
但是,当您实现singleton时,它不负责执行与它存储的对象相关的操作。您必须监视PPModel对象中的更改,因为只有这个类负责它的内部状态。