internal virtual IMessageSink CreateServerObjectChain(MarshalByRefObject serverObj)
{
// a bare chain would just be the dispatcher sink
IMessageSink serverObjectChain = new ServerObjectTerminatorSink(serverObj);
// now loop over properties to add some real sinks.
Object prop = null;
int iSink = _numCtxProps;
while (iSink-- > 0)
{
// see if this property wants to contribute a ServerObjectSink
// we have to start chaining in the reverse order
prop = _ctxProps[iSink];
IContributeObjectSink sink = prop as IContributeObjectSink;
if (null != sink)
{
// yes, chain the sink ahead of the chain of sinks constructed so far.
serverObjectChain = sink.GetObjectSink( serverObj, serverObjectChain);
if (serverObjectChain == null)
{
throw new RemotingException(
Environment.GetResourceString(
"Remoting_Contexts_BadProperty"));
}
}
}
return serverObjectChain;
}