CacheManager - Dependency injection
You are not doing dependency injection but using another pattern which is called service locator which isn't by the way so cool becasue classes using it depend on the Container:


cache = Container.Instance.Resolve&lt;ICache&gt;();



The CacheManager resolves an ICache from the Container. None of your classes should even know that the Container exists (but the one that configures it).

You should remove the CacheManager entirely and instead correctly inject the ICache to classes that require it.

class ThisClassRequiresCache
{
    public ThisClassRequiresCache(ICache cache) { .. }
}


Your dependency injection framework should handle the injection.



As far as the private Cache properety is concerned you should add another cache == null check to prevent unnecessary locks after the cache has already been created:

get
{
    if (cache == null)
    {
        lock (syncRoot)
        {
            if (cache == null)
            {
                cache = Container.Instance.Resolve&lt;ICache&gt;();
            }
        }
    }

    return cache;
}