//IEnumerable<object> Read(params Type[] eventTypes); //void Invoke(params KeyValuePair<Type, Action<object>>[] handlers); private List <TypeReaderFactory> CreateTypeReaders(Dictionary <Type, Action <object> > handlers) { var knownProxies = new Dictionary <Type, List <Type> >(); var typesMap = new Type[ushort.MaxValue]; var typeReaders = new TypeReaderFactory[ushort.MaxValue]; foreach (var type in handlers) { var originalTypes = knownProxies.ContainsKey(type.Key) ? knownProxies[type.Key] : new List <Type> { type.Key }; foreach (var originalType in originalTypes) { if (_typeIdsMap.ContainsKey(originalType.FullName)) { var typeId = _typeIdsMap[originalType.FullName]; var path = _folder + "\\" + originalType.FullName + "\\"; typesMap[typeId] = type.Key; typeReaders[typeId] = new TypeReaderFactory(path, type.Key, _customReaders) { Handler = handlers[type.Key] }; } } } return(typeReaders.Where(t => t != null).ToList()); }