Установить метод, не введенный при изменении ConcurrentDictionary? - PullRequest
0 голосов
/ 28 октября 2019

У меня есть ConcurrentDictionary для статического класса как такового:

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

Я хочу перехватить изменения, сделанные в установщике, чтобы выполнить некоторую логику, но когда я использую этот код для обновления из другогокласс, я не вижу введенный метод set.

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

1 Ответ

2 голосов
/ 28 октября 2019

Вы не устанавливаете свойство Inventory. Вы получаете это.

Ваш код может быть переписан как:

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

Вы можете видеть, что вы получаете MyData.Inventory, а не установка it.

Если бы вы написали код, который сделал это:

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

, то вы бы установили MyData.Inventory, и ваш установщик был бы вызван.

Вы можете достичь того, чего хотите, если я инкапсулирую ConcurrentDictionary в вашем классе. (Похоже, вы действительно хотите всегда устанавливать Lot для данного lotId, поэтому я обновил код, чтобы сделать это).

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