I had a challenge to write a feature that would allow a custom trace listener and a trace message consumer to talk to each other in a completely decoupled manner. They were blind to each other, completely ignorant of each other's existence. A first tentative pass suggested that a static class might be useful, but because this runs in a web context (among other reasons), that is too risky. So we had to share an instance of an object between them that both could read/write but had to obtain without reference to each other. By using Castle Windsor container to obtain the linking object, we could accomplish this. The catch was, we had to set the lifestyle to "Thread" so that we had, not a full Singleton, but a "per-thread" Singleton object. This allows us to share the object on the execution thread without exposing it to the entire process space, which is a big deal in a web context. The only other way to have done this was to have the instance exposed as a property of some other shared object, and it's not likely that this would have been acceptable. Here are some links: DotNetSlackers Stack Overflow The Castle Project