Пример #1
0
        private bool TryAddImplicitHandler(Type t, out AHandler implicitHandler)
        {
            Type baseT = FindCompatibleBaseType(t);
            if (baseT != null)
            {
                implicitHandlerMap.Add(t, handlers[baseT]); //Connecting the Types
                implicitHandler = handlers[baseT];
                return true;
            }

            if (IncludeInterfaces)
            {
                Type[] interfaces = FindInterfaces(t);
                if (interfaces.Length != 0)
                {
                    implicitHandlerMap.Add(t, handlers[interfaces[0]]); //Connecting the Types
                    implicitHandler = handlers[interfaces[0]];
                    return true;
                }
            }

            if (UseFallback)
            {
                implicitHandlerMap.Add(t, fallbackHandler);
                implicitHandler = fallbackHandler;
                return true;
            }

            implicitHandler = null;
            return false;
        }
Пример #2
0
        private bool TryGetHandler(Type t, out AHandler handler)
        {
            if (handlers.ContainsKey(t))
            {
                //Exact Type
                handler = handlers[t];
                return true;
            }

            if (TraverseUp) //Traverse Up
            {
                if (implicitHandlerMap.ContainsKey(t)) //Cache Hit
                {
                    handler = implicitHandlerMap[t];
                    return true;
                }

                if (TryAddImplicitHandler(t, out handler)) //Try Add To Cache
                {
                    return true;
                }
            }

            if (UseFallback)
            {
                handler = fallbackHandler;
                return true;
            }

            handler = null;
            return false;
        }
Пример #3
0
        public void AddHandler(Type t, AHandler handler)
        {
            if (handlers.ContainsKey(t))
            {
                return;
            }

            if (implicitHandlerMap.ContainsKey(t))
            {
                implicitHandlerMap.Remove(t); //Remove From cache and add to handlers
            }

            handlers.Add(t, handler);
        }
Пример #4
0
 public void AddHandler<T>(AHandler<T> handler)
 {
     AddHandler(typeof(T), handler);
 }
Пример #5
0
 public Byt3Handler(Byt3HandlerLookupType lookupType = Byt3HandlerLookupType.TraverseUp,
     AHandler fallback = null)
 {
     LookupType = lookupType;
     fallbackHandler = fallback ?? new DefaultHandler();
 }