private static Dictionary <string, AttributedModule> InitAttributedModules(Assembly assembly) { var initializers = from typeInfo in assembly.DefinedTypes let moduleAttribute = typeInfo.GetCustomAttribute <ReactModuleAttribute>() where moduleAttribute != null select new AttributedModule { ModuleType = typeInfo.AsType(), ModuleAttribute = moduleAttribute }; return(initializers.ToDictionary(m => ReactModuleInfo.GetModuleName(m.ModuleType, m.ModuleAttribute))); }
internal static void AddAttributedModules(this IReactPackageBuilder packageBuilder) { foreach (var type in typeof(ReactPackageBuilderExtensions).GetTypeInfo().Assembly.GetTypes()) { var moduleAttribute = type.GetTypeInfo().GetCustomAttribute <ReactModuleAttribute>(); if (moduleAttribute != null) { ReactModuleInfo moduleInfo = ReactModuleInfo.GetOrAddModuleInfo(type, moduleAttribute); packageBuilder.AddModule(moduleInfo.ModuleName, moduleInfo.ModuleProvider); } } }
internal static ReactModuleInfo GetOrAddModuleInfo(Type moduleType, ReactModuleAttribute moduleAttribute) { lock (s_moduleInfoMutex) { if (s_moduleInfos is null) { s_moduleInfos = new Dictionary <Type, ReactModuleInfo>(); } if (s_moduleInfos.TryGetValue(moduleType, out ReactModuleInfo moduleInfo)) { return(moduleInfo); } moduleInfo = new ReactModuleInfo(moduleType, moduleAttribute); s_moduleInfos.Add(moduleType, moduleInfo); return(moduleInfo); } }
public void AddToPackageBuilder(IReactPackageBuilder packageBuilder) { ReactModuleInfo moduleInfo = ReactModuleInfo.GetOrAddModuleInfo(ModuleType, ModuleAttribute); packageBuilder.AddModule(moduleInfo.ModuleName, moduleInfo.ModuleProvider); }