public object Get(Type pluginType, Instance instance, IBuildSession session)
{
object result = null;
int key = instance.InstanceKey(pluginType);
_lock.EnterUpgradeableReadLock();
if (_objects.ContainsKey(key))
{
result = _objects[key];
_lock.ExitUpgradeableReadLock();
}
else
{
_lock.EnterWriteLock();
try
{
result = buildWithSession(pluginType, instance, session);
_objects.Add(key, result);
}
finally
{
_lock.ExitWriteLock();
}
}
return result;
}