2016-08-02 32 views
0
geändert

Ich habe diese KlasseSetter eines Singleton von einer custome Klasse in .net C# nicht ausgelöst, wenn nur eine Eigenschaft

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; } 
} 

Nun, wenn ich sPP auf diese Weise eingestellt, funktioniert alles einwandfrei:

SSP.Instance.sPP = new PPModel(){...}; 

Aber ich möchte wissen, ob es möglich ist, nur eine Eigenschaft dieses Singleton zu aktualisieren und den Setter auf diese Weise auslösen:

SSP.Instance.sPP.property4 = 7; 

Wenn ich es auf diese Weise mache, hat der Singleton sPP den aktualisierten Wert, aber der Setter scheint nicht ausgelöst zu sein, was bedeutet, dass der zusätzliche Code wie das Speichern der Datenbank nicht funktioniert.

Haben Sie eine Chance, dass das funktioniert?

Vielen Dank im Voraus.

Antwort

0

eine gute Lösung dafür ist das Modell zu ändern volle Eigenschaften Definitionen zu haben, und an dem Einrichter, rufen Sie das DB-Update, wie zum Beispiel:

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 
} 
+0

Danke, funktioniert für mich :) – Gogglehead

0

Sie können nicht Setter in Ihrem Singleton auslösen, indem Aktualisieren von internen gespeicherten Objekteigenschaften.

Sie können Ihre Setter wie folgt auslösen:

SSP.Instance.sPP = new PPModel(){...}; 
var instance = SSP.Instance.sPP; 
instance.property4 = 7 
SSP.Instance = instance; 

Auf diese Weise werden Sie die genaue Variable zu Ihrer Instanz und Trigger-Update zurückgesetzt.

Aber da Sie Singleton implementieren, ist es NICHT dafür verantwortlich, Aktionen in Bezug auf das Objekt zu tätigen, das es speichert. Sie müssen Änderungen in Ihrem PPModel-Objekt überwachen, da nur diese Klasse für ihren internen Status verantwortlich ist.