示例#1
0
 private bool TryOfToStoreCombain(Type keyType, Type valueType, object key, FuncArgWrapper creator, out object value)
 {
     if (TryOfToStoreContainer(keyType, valueType, key, creator, out value))
     {
         return(false);
     }
     value = TryOfToStoreLocal(keyType, valueType, key, creator);
     return(true);
 }
示例#2
0
 private bool TryOfToStoreContainer(Type keyType, Type valueType, object key, FuncArgWrapper creator, out object value)
 {
     try
     {
         value = ContainerServer.OfToStore(keyType, valueType, key, creator);
         return(true);
     }
     catch
     {
         value = null;
         return(false);
     }
 }
示例#3
0
        public object OfToStore(Type keyType, Type valueType, object key, Func <object, object> func)
        {
            var  creator = new FuncArgWrapper(func);
            var  type    = typeof(StoreExtensions <,>).MakeGenericType(keyType, valueType);
            bool isLocal;

            if (IsLocal || (_localTypes.TryGetValue(type, out isLocal) && isLocal))
            {
                return(TryOfToStoreLocal(keyType, valueType, key, creator));
            }
            object value;

            isLocal = TryOfToStoreCombain(keyType, valueType, key, creator, out value);
            _localTypes.GetOrAdd(type, isLocal);
            return(value);
        }
示例#4
0
 private object TryOfToStoreLocal(Type keyType, Type valueType, object key, FuncArgWrapper creator)
 {
     return(LocalServer.OfToStore(keyType, valueType, key, creator));
 }
示例#5
0
 public static TValue GetSet(TKey key, FuncArgWrapper creator)
 {
     return(Store.GetOrAdd(key, (TValue)creator.Execute(key)));
 }
示例#6
0
 public object OfToStore(Type keyType, Type valueType, object key, FuncArgWrapper creator)
 {
     return(StoreExtensions.GetSet(keyType, valueType, key, creator));
 }