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; }
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; }
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); }
public void AddHandler<T>(AHandler<T> handler) { AddHandler(typeof(T), handler); }
public Byt3Handler(Byt3HandlerLookupType lookupType = Byt3HandlerLookupType.TraverseUp, AHandler fallback = null) { LookupType = lookupType; fallbackHandler = fallback ?? new DefaultHandler(); }