private IObjectRef GetCachedOrCreateResource(IResourceSource resourceSource, Type interfaceType, bool addRef = true) { object obj2; IObjectRef ref3; Validate.IsNotNull <IResourceSource>(resourceSource, "resourceSource"); if (resourceSource.IsResource) { return(GetRef((IObjectRef)resourceSource, interfaceType, addRef)); } TupleStruct <ResourceID, long> resourceKey = TupleStruct.Create <ResourceID, long>(resourceSource.ResourceID, resourceSource.Version); Label_0036: obj2 = this.sync; lock (obj2) { IObjectRef objectRef = this.TryGetCachedResourceImpl(resourceKey, interfaceType, addRef); if (objectRef != null) { return(GetRef(objectRef, interfaceType, addRef)); } objectRef = resourceSource.CreateResource(this); if (this.genCaches[0].TryAdd <TupleStruct <ResourceID, long>, IObjectRef>(resourceKey, objectRef)) { ref3 = GetRef(objectRef, interfaceType, addRef); } else { objectRef.Dispose(); goto Label_0036; } } return(ref3); }
public IObjectRef GetCachedOrCreateResource(IResourceSource resourceSource, Type interfaceType) { Validate.IsNotNull <IResourceSource>(resourceSource, "resourceSource"); if (resourceSource.IsResource) { return(GetRef((IObjectRef)resourceSource, interfaceType, false)); } return(resourceSource.CreateResource(this)); }