Свойство Current / Context в классе - PullRequest
0 голосов
/ 13 мая 2010

Я хотел бы реализовать в своем классе текущее свойство, которое возвращает текущий активный контекст класса (так же, как httpcontext.current и т. Д.), Например:

using(classA x = new classA(..))
{
    classB.Dosomething();
}

где метод dosomething () получает текущий контекст класса A для выполнения некоторой операции.

Как мне создать такую ​​функциональность?

Greetz, Ричард

Ответы [ 3 ]

0 голосов
/ 13 мая 2010

Обычно свойство Current является статическим свойством, сохраняемым для каждого потока. ThreadLocal<T> идеально подходит для реализации этого.

0 голосов
/ 13 мая 2010

Вы должны создать свойство [ThreadStatic] static Current, затем написать Current = this в конструкторе и установить его на null в Dispose. Возможно, вы захотите создать исключение, если кто-то сделает вторую копию в том же потоке. В качестве альтернативы вы можете сохранить стек.

0 голосов
/ 13 мая 2010

Очевидно, что для этого потребуется некоторая защита от параллелизма, но если вы ищете одиночный путь .... (для этого также потребуется реализация IDisposable)

public class A {
    public static A Current { get { return _instance } }

     private static A _instance {
         get 
         { 
            if(_instance ==null){ 
                 instance = new A();
             } 
             return _instance;
          }
      }

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...