// Public Methods public void Add(Type t, NodeTranslatorBound b) { List <NodeTranslatorBound> x; if (!_items.TryGetValue(t, out x)) { _items[t] = x = new List <NodeTranslatorBound>(); } x.Add(b); }
/// <summary> /// Porządkuje dane i przygotowuje cache do tłumaczeń /// </summary> public void Prepare() { var allTypes = (from assembly in TranslationAssemblies from type in assembly.GetTypes() select type).ToArray(); foreach (var type in allTypes) { if (type.IsInterface) { continue; } var interfaces = type.GetInterfaces(); foreach (var interfaceType in interfaces) { var generic = interfaceType.IsGenericType ? interfaceType.GetGenericTypeDefinition() : interfaceType; #region IPhpNodeTranslator if (generic == typeof(IPhpNodeTranslator <>)) { var genericType = interfaceType.GetGenericArguments()[0]; var obj = Activator.CreateInstance(type); var map = type.GetInterfaceMap(interfaceType); var methods = map.InterfaceMethods; var methodTranslateToPhp = methods.Single(ii => ii.Name == "TranslateToPhp"); var gpmethod = methods.Single(ii => ii.Name == "GetPriority"); var bound = new NodeTranslatorBound(methodTranslateToPhp, obj, gpmethod); NodeTranslators.Add(genericType, bound); } #endregion #region IModuleProcessor // ReSharper disable once InvertIf if (generic == typeof(IModuleProcessor)) { var obj = Activator.CreateInstance(type) as IModuleProcessor; ModuleProcessors.Add(obj); } #endregion } } }
private static int?GetNodeTranslatorBoundPriority(NodeTranslatorBound i) { // use this named method insead of lambda for performace reasons return(i.Priority); }
/// <summary> /// Porządkuje dane i przygotowuje cache do tłumaczeń /// </summary> public void Prepare() { var allTypes = (from assembly in _translationAssemblies from type in assembly.GetTypes() select type).ToArray(); foreach (var type in allTypes) { if (type.IsInterface) continue; var interfaces = type.GetInterfaces(); foreach (var interfaceType in interfaces) { var generic = interfaceType.IsGenericType ? interfaceType.GetGenericTypeDefinition() : interfaceType; #region IPhpNodeTranslator if (generic == typeof(IPhpNodeTranslator<>)) { var genericType = interfaceType.GetGenericArguments()[0]; var obj = Activator.CreateInstance(type); var map = type.GetInterfaceMap(interfaceType); var methods = map.InterfaceMethods; var methodTranslateToPhp = methods.Single(ii => ii.Name == "TranslateToPhp"); var gpmethod = methods.Single(ii => ii.Name == "GetPriority"); var bound = new NodeTranslatorBound(methodTranslateToPhp, obj, gpmethod); _nodeTranslators.Add(genericType, bound); } #endregion #region IModuleProcessor // ReSharper disable once InvertIf if (generic == typeof(IModuleProcessor)) { var obj = Activator.CreateInstance(type) as IModuleProcessor; _moduleProcessors.Add(obj); } #endregion } } }