public static void RegisterAllModules(this IModuleFactory moduleFactory, Assembly assembly) { var foundTypes = assembly .GetTypes() .Where(t => t.GetCustomAttribute <ModuleAttribute>() != null) .ToList(); foreach (var type in foundTypes) { ModuleAttribute attribute = type.GetCustomAttribute <ModuleAttribute>(); var description = FillDescriptionFromAttribute(type, attribute); moduleFactory.Register(description.ModuleType, description, (runtime, s) => (IModule)s.GetInstance(type), type); } var typeAliases = assembly .GetTypes() .Where(t => t.GetCustomAttribute <ModuleTypeAliasAttribute>() != null) .ToList(); foreach (var type in typeAliases) { ModuleAttribute moduleAttribute = type.GetCustomAttribute <ModuleAttribute>(); ModuleTypeAliasAttribute aliasAttribute = type.GetCustomAttribute <ModuleTypeAliasAttribute>(); if (moduleAttribute == null || aliasAttribute == null) { continue; } moduleFactory.RegisterAlias(aliasAttribute.AliasType, moduleAttribute.ModuleType, aliasAttribute.IncludeInCatalog); } }
static ModuleDescription FillDescriptionFromAttribute(Type type, ModuleAttribute attribute) { return(new ModuleDescription { ModuleType = attribute.ModuleType ?? type.FullName, HelpText = attribute.Description, ReferenceUrl = attribute.ReferenceUrl, IconPath = attribute.IconPath }); }