Итоговые сведения о процессах, доменах приложений и контекстах

Определение контекстно-зависимого объекта

Контекстно-свободные и контекстно-зависимые типы

Объекты .NET, которые не требуют никакого особого контекстного сопровождения, называются контекстно-свободными (context-agile). К таким объектам доступ может быть получен из любого места внутри обслуживающего домена приложения без нарушения их требований времени выполнения. Создание контекстно-свободных объектов не требует приложения никаких особых усилий, поскольку при этом вообще ничего не нужно делать (ни снабжать их какими-то контекстными атрибутами, ни наследовать от базового класса System.ContextBoundObject).

Предположим, что требуется определить класс (SportsCarTS), который

автоматически обеспечивает безопасность в отношении потоков, даже без помещения внутрь реализации его членов жестко закодированной логики синхронизации потоков. Чтобы получить такой класс, необходимо просто унаследовать его от ContextBoundObject и применить к нему атрибут [Synchronization],

К этому моменту должно стало гораздо понятнее, каким образом сборка .NET обслуживается в CLR-среде. Ниже для удобства перечислены ключевые моменты, которые следует вынести из всего предыдущего материала.

• В каждом процессе .NET может обслуживаться один и более доменов приложений. В каждом из этих доменов приложения, в свою очередь, может обслуживаться любое количество взаимосвязанных сборок .NET. Все домены приложений могут по отдельности загружаться и выгружаться CLR-средой (или программным образом с помощью класса System.AppDomain).

• Любой отдельно взятый домен приложения может включать в себя один и более контекстов. За счет применения контекста CLR-среде удается помещать информацию об "особых потребностях" объекта в логический контейнер и тем самым гарантировать принятие их во внимание на этапе выполнения. Если изложенный в настоящей главе материал показался слишком сложным, не стоит переживать. По большей части исполняющая среда .NET способна самостоятельно разбираться в деталях процессов, доменов приложений и контекстов. С другой стороны, приведенные сведения являются хорошей основой для понимания способов разработки многопоточных приложений в рамках платформы .NET.