2013-02-27 3 views
1

У меня есть этот код:Лучший способ управления статическое свойство

public static class ProcessClass() 
{ 
    public static string MyProp {get;set;} 

    public static void ProcessMethod(InputObject input) 
    { 
     if(String.IsNullOrEmpty(MyProp) 
       MyProp = input.Name(); 

     //do stuff 

     MyProp = null; 

    } 

} 

Теперь все для MyProp кроме уже был на месте. Мне нужен был способ отслеживать исходный код input.Name, поскольку он может меняться, а также потому, что ProcessMethod может быть вызван снова внутри с другим значением input.Name из-за бизнес-правил, и мне нужно указать, что этот второй звонок пришел от input.Name.

Очевидно, это плохо, поскольку, если два человека делают это в одно и то же время, они оба будут использовать одно и то же значение MyProp, а просто сделать null в конце кажется опасным и взломанным. У меня нет возможности изменить этот метод на нестатический, потому что это связано с изменением МНОГО кода, что на самом деле не является вариантом.

Каковы способы использования статического свойства, но при этом сохраняются мои исходные значения input.Name без риска возникновения проблем с безопасностью потоков? Один из вариантов, о котором я думаю, заключается в том, чтобы каждый метод принимал input.Name(), и трек был таким образом (и удалял MyProp), но я могу представить, что выходите из рук быстро и крайне беспорядочно.

Мне не нужно, чтобы это было свойством, но если это, очевидно, должно быть статическим в этом классе.

+0

Я не знаю ответа на это, но я настоятельно рекомендую сделать «MyProp» или любое другое подобное решение, в котором вы получите «частный», а не «публичный». Таким образом, по крайней мере, вы устраните вероятность того, что он будет изменен любым методом вне 'ProcessClass', тем самым значительно уменьшив вероятность сбоя. –

+0

Как правило, кажется, что это часть более крупной проблемы дизайна. – Dzienny

ответ

1

Поскольку это может быть среда многопользовательской, а затем заменить строку с ConcurrentDictionary, где вы храните input.Name() в виде Value и как Key уникального идентификатора пользователя (идентификатор, имени и т.д.).

Смежные вопросы