Beispiel #1
0
        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);
        }
Beispiel #2
0
 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));
 }