Tengo un ConcurrentDictionary en una clase estática como tal:

static class MyData
{
    private static ConcurrentDictionary<string, Lot> _inventory;
    public static ConcurrentDictionary<string, Lot> Inventory
    {
        get
        {
            return _inventory;
        }
        set
        {
            _inventory = value;
        }
    }
}

Quiero interceptar los cambios que se realizan en el setter para ejecutar algo de lógica, pero cuando uso este código para actualizar desde otra clase, no veo que se ingrese el método set.

MyData.Inventory.AddOrUpdate(lotID, lot, (key, oldValue) => lot);
0
Paul 28 oct. 2019 a las 14:21

1 respuesta

La mejor respuesta

No está configurando la propiedad Inventory. Lo estás consiguiendo.

Su código podría reescribirse como:

var inventory = MyData.Inventory;
inventory.AddOrUpdate(lotID, lot, (key, oldValue) => lot);

Puede ver que lo está obteniendo MyData.Inventory, no configurándolo .

Si escribió un código que hizo esto:

MyData.Inventory = new ConcurrentDictionary<string, Lot>();

entonces estarías configurando MyData.Inventory, y tu setter sería llamado.

Puedes lograr lo que quieras encapsulando el ConcurrentDictionary dentro de tu clase. (Parece que realmente desea establecer siempre el Lot para un lotId dado, así que actualicé el código para hacer esto).

static class MyData
{
    private static ConcurrentDictionary<string, Lot> _inventory = new ConcurrentDictionary<string, Lot>();

    public static Update(string lotId, Lot lot)
    {
        // Add your interception code here
        _inventory[lotId] = lot;
    }
}
2
canton7 28 oct. 2019 a las 11:23