У меня есть статический класс со статическим свойством get, и в это свойство, я делаю следующее:
// property body
{
// HttpContext.Current is NOT null
...
Parallel.ForEach(files, file =>
{
// HttpContext.Current is null
var promo = new Promotion();
...
});
...
// HttpContext.Current is NOT null
}
Этот статический класс не подвергается инициализации типа, пока представление не использует это свойство.
Проблема в том, что статический конструктор Promotion
инициализируется первым когда новое продвижение ()
создается в Parallel.ForEach ()
, используется HttpContext.Current
. Когда промо
создается в область этого Parallel.ForEach ()
, HttpContext.Current
равно null
, и поэтому new Promotion ()
вызывает исключение.
HttpContext.Current
не имеет значения NULL в статическом свойстве get, потому что он не вызывается до тех пор, пока представление не использует его (и поэтому существует HttpContext.Current
).
Если бы Продвижение
использовало HttpContext.Current
в своих экземплярах вместо статических элементов, я, вероятно, мог бы просто передать HttpContext.Current
в новый Конструктор Promotion ()
:
var context = HttpContext.Current;
Parallel.ForEach(files, file =>
{
var promo = new Promotion(context);
});
Но поскольку static
членам Promo требуется HttpContext.Current, я не могу. Я мог бы, вероятно, перепроектировать класс Promotion
, чтобы изменить статические члены, которым он нужен, чтобы они были членами экземпляра, но они статичны по какой-то причине - если бы все статические члены имели вместо этого будет определяться в каждом экземпляре каждый раз, когда создается новый экземпляр Promotion
.
Каковы возможные обходные пути для этого? Я не понимал, что HttpContext.Current
будет нулевым в рамках Parallel.ForEach ()
.