Here's something I cobbled together to mimic the Java ThreadLocal class. I wanted a nice way to wrap up the CallContext class, I call it "CallLocal". It provides typesafe access through generics, which saves a bit of typing (no pun intended). It looks something like this:

using System;
using System.Runtime.Remoting.Messaging;
namespace Framework.Core.Utility
{
public class CallLocal<T>
{
private string _keyName;
public CallLocal(string keyName)
{
if (string.IsNullOrEmpty(keyName))
throw new ArgumentNullException("keyName", "keyName cannot be null or empty.");
_keyName = keyName;
}
public T Get()
{
return (T)CallContext.GetData(_keyName);
}
public void Set(T data)
{
CallContext.SetData(_keyName, data);
}
}
}


Knock yourself out.