public bool IContextAttribute.IsContextOK(Context clIEntCtx,IConstructionCallMessage ctorMsg)
只要其中一個上下文attribute返回false,CLR就必須創建一個新的上下文來容納這個新的對象。這樣,每個上下文attribute可以在這個新的上下文中注入一個或多個上下文屬性。這些注入通過以下方法完成:
public void IContextAttribute.GetPropertIEsForNewContext(IConstructionCallMessage ctorMsg)
·IContextProperty
上下文屬性是實現System.Runtime.Remoting.Contexts.IContextProperty接口的類的實例。每個上下文可以包含多個屬性。上下文屬性在上下文創建的時候通過上下文attribute注入。一旦每個上下文attribute注入了它的屬性,就會為每個屬性調用下面的方法。此後就無法在這個上下文中注入另外的屬性了:
public void IContextProperty.Freeze( Context ctx )
然後,CLR通過調用下面的方法判斷新的上下文能否滿足每個屬性:
public bool IContextProperty.IsNewContextOK( Context ctx )
每個上下文屬性都有一個通過Name屬性定義的名稱:
public string IContextProperty.Name{ get }
上下文中承載的對象的方法可以通過調用下面的方法訪問上下文屬性:
IContextProperty Context.GetProperty( string sPropertyName )
這一點很有意思,上下文中的對象通過它們所在的上下文的屬性可以共享信息並訪問服務。不過,上下文屬性的主要作用並不在於此。上下文屬性的主要作用在於向相關上下文中的消息接收器區域注入消息接收器(MessageSink)。(消息接收器區域的概念將在後面介紹)
以上注入MessageSink的過程可以用下圖概括:
MessageSink Region