C# ASP.NET Ориентированное на многопотоковое исполнение статическое поле только для чтения

У меня есть следующий код в моем проекте ASP.NET

public sealed class IoC
{
    private static readonly IDependencyResolver resolver =
        Service.Get("IDependencyResolver") as IDependencyResolver;

    static IoC()
    {
    }

    private IoC()
    {
    }

    public static IDependencyResolver Container
    {
         get
         {
             return resolver;
         }
    }
}

public static class Service
{
    public static object Get(string serviceName)
    {
        // Code to create and return instance...
    }
}

IoC.Container собирается быть ориентированным на многопотоковое исполнение?

8
задан dsolimano 9 May 2012 в 05:03
поделиться

2 ответа

Инициализация статических полей является потокобезопасной: то есть среда выполнения .NET гарантирует, что ваше поле будет инициализировано только один раз в программе, независимо от того, сколько потоков обращаются к нему и в каком порядке.

Как указывает Андрей, сам метод Service.Get должен быть потокобезопасным.

1
ответ дан 6 December 2019 в 02:24
поделиться

Сам по себе IoC выглядит нормально, но вся структура не будет потокобезопасной, если преобразователь не является потокобезопасным. Если вы хотите иметь преобразователь для каждого потока, вы можете использовать атрибут [ThreadStatic]

0
ответ дан 6 December 2019 в 02:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: