So, let's say I have an interface IThingFactory
:
public interface IThingFactory
{
Thing GetThing(int thingId);
}
Now, let's say I have a concrete implementation that retrieves Thing
s 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:
public class CachedThingFactory : IThingFactory
{
private IThingFactory _wrapped;
private Dictionary<int, Thing> _cachedThings;
public CachedThingFactory(IThingFactory wrapped)
{
this._wrapped = wrapped;
_cachedThings = new Dictionary<int,Thing>();
}
public Thing GetThing(int thingId)
{
Thing x;
if(_cachedThings.TryGetValue(thingId, out x))
return x;
x = _wrapped.GetThing(thingId);
_cachedThings[thingId] = x;
return x;
}
}
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)?