Now, let's say I have a concrete implementation that retrieves Things from a database. Now, let's also say I have a concrete implementation that wraps an existing IThingFactory and checks for a Thing's presence in, say, an in-memory cache before hitting the wrapped IThingFactory. Something like:

How would I deal with a scenario like this using dependency injection with something like, say, Ninject, so that I could configure the DI container so that I can inject or remove a caching proxy like this, or, say, something that does logging, or (insert here)?

One of the benefits of DI framework is that you don't have to do things like these. Ninject has various scopes that you can use to specify the lifetime of your objects. It'll handle caching and stuff for you.

Not exactly what I'm asking. I'm familiar with Ninject's object scopes, and I'm leveraging request scope and singleton scope heavily in my MVC-based app. Your suggestion solves my contrived example, but misses the point of the question. How do I configure a binding so that I can "wrap" an interface, like above?
–
FMMJul 19 '11 at 19:26

Forgot to mention, if you use BindToFactory(), you need to wire up your own provider - tweak your CachedThingFactory to implement IProvider (more in here github.com/ninject/ninject/wiki/…). You can also use .ToMethod() approach.
–
MrchiefJul 19 '11 at 20:07