Вообще говоря, с появлением контейнеров DI и IoC, которые обеспечивают контроль компонентов над образом жизни, я стараюсь ограничить использование static
до абсолютного минимума. При использовании одноэлементных компонентов, управляемых контейнером IoC, ценность и использование статических классов и / или функций уменьшаются до исчезающих уровней.
Тем не менее, на самом деле нет ограничений на количество статических типов или элементов, которые вы можете иметь в сборке. Статические члены типа хранятся в чем-то, называемом кучами загрузчика, а не обычной кучей GC, CLR, и эти кучи начинаются довольно небольшими (я думаю, около 32 тыс.). Учитывая это, вероятно, потребуется много тысяч статических классов. и / или методы заполнения кучи загрузчика.
Вот некоторые из немногих способов, которыми я все еще использую статические члены или классы:
[ThreadStatic] static
поля, используемые в классах, которые должны обеспечивать поведение одиночного потока
- статические конструкторы в моих классах конфигурации .NET, такие как
ConfigurationSection
, ConfigurationElement
и т. Д.
- Я начал заменять этот стиль конструирования класса конфигурации на простое использование атрибутов
[ConfigurationProperty()]
, которое проще и в целом чище, хотя и требует очень небольших дополнительных затрат
- Действительно глобальные, совместно используемые данные времени выполнения ... это просто проще, чем использование IoC и дополнительный тип