Processor that would process an Object (say a message you received)
Not the answer you're looking for, but this bit of code casts msg twice: if(msg is T) { inner.Process((T)msg); }. You can cast it once by using as, e.g. var m = msg as T; if (m != null) inner.Process(m); Also if you're actually writing the if bit on one line (as I love to do for one-liners) then I don't see the point of using curly braces on that line, though I guess that's just a style issue. You didn't use it for the else part after all.

And I'm sure in "real life" you won't have a test called "Test1", so I won't say anything about that...