private void RegisterByConvention(IEnumerable <Assembly> assemblies) { foreach (var assembly in assemblies.ToList()) { if (RegisteredAssemblies.Contains(assembly)) { continue; } var interfaces = (from type in assembly.GetTypes() where type.IsInterface select type).ToList(); var tempRegistrations = (from @interface in interfaces from type in assembly.GetTypes() where !type.IsAbstract && type.IsClass && @interface.IsAssignableFrom(type) && !type.GetCustomAttributes(typeof(ExcludeFromRegistrationAttribute), true).Any() select new { Interface = @interface, Implementation = type }).ToList(); // get interfaces with only one implementation var registrations = (from r in tempRegistrations group r by r.Interface into grp where grp.Count() == 1 select new { Interface = grp.Key, grp.First().Implementation }).ToList(); registrations.ForEach(f => ServiceCollection.AddTransient(f.Interface, f.Implementation)); RegisterHandlers(assembly); RegisterOneWayHandlers(assembly); RegisterPostRegistrationTasks(assembly); RegisterCleanupTasks(assembly); } }
public SettingsList RegisterAssembly(LoadedLibrary library, Assembly assembly) { lock (_assemblies) { try { RegisteredAssembly localAssembly = new RegisteredAssembly(assembly, library); if (!_assemblies.Contains(assembly.FullName)) { SettingsList classes = GetClassList(assembly); foreach (SettingsItem setting in classes.Values) { RegisteredClass classValue = new RegisteredClass(setting.Name, library, localAssembly, setting.Value); _classes.Add(classValue); } _assemblies.Add(localAssembly); return(classes); } return(new SettingsList()); } catch { UnregisterAssembly(library, assembly); throw; } } }