Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Типы.NET, которые не требуют никакого особого контекстного сопровождения,
называются контекстно-свободными (context-agile) объектами. К таким объектам доступ
может получаться из любого места внутри обслуживающего домена приложения без
нарушения их требований времени выполнения.
Рис. 4. Процессы, домены приложений и границы контекста
Создание контекстно-свободных объектов не требует приложения никаких
особых усилий, поскольку для их создания просто не нужно ничего делать (ни снабжать
их какими-либо контекстными атрибутами, ни порождать от базового класса System.
ContextBoundObject):
// Контекстно-свободный объект загружается в нулевой контекст.
public class SportsCar{}
С другой стороны, объекты, которые действительно требуют выделения отдельного
контекста, называются контекстно-зависимыми (context-bound) объектами и должны
обязательно наследоваться от базового класса System.ContextBoundObject. Этот
базовый класс отражает тот факт, что соответствующий объект может правильно
функционировать только в рамках контекста, в котором он был создан. Зная о роли
контекста.NET должно быть совершенно ясно, что в случае попадания контекстно-зависимого объекта каким-то образом в несоответствующий контекст, будет обязательно случаться что-то плохое, причем в самый неподходящий момент.
Помимо наследования от Systern.ContextBoundObject, контекстно-зависимый тип должен сопровождаться специальными атрибутами.NET, называемыми контекстными атрибутами. Все контекстные атрибуты наследуются от базового класса Context Attribute, который является членом пространства имен System.Runtime.Remoting.Contexts:
public class ContextAttribute:
Attribute, IContextAttribute, IContextProperty
public ContextAttribute(string name);
public string Name { virtual get; }
public object Typeld { virtual get; }
public virtual bool Equals(object o);
public virtual void Freeze (
System.Runtime.Remoting.Contexts.Context newContext);
public virtual int GetHashCode();
public virtual void GetPropertiesForNewContext(
System.Runtime.Remoting.Activation.IConstructionCallMessage ctorMsg);
public Type GetTypeO; public virtual bool IsContextOK(
Systern.Runtime.Remoting.Contexts.Context ctx,
System.Runtime.Remoting.Activation.IConstructionCallMessage ctorMsg);
public virtual bool IsDefaultAttribute ();
public virtual bool IsNewContextOK(
System.Runtime.Remoting.Contexts.Context newCtx);
public virtual bool Match(object obj);
public virtual string ToStringO;
}
Благодаря тому, что класс ContextAttribute не является герметизированным,
допускается создавать и свои собственные специальные контекстные атрибуты
(унаследовав от ContextAttribute и переопределив необходимые виртуальные методов). После этого, конечно же, можно создавать и специальные программные единицы, способные реагировать на контекстные настройки.
Дата публикования: 2015-07-22; Прочитано: 461 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!