private void PrepareContainer() { if (ContainerPrepared) { return; } var builder = new ContainerBuilder(); foreach (var registeredFile in GetAssembliesDetail()) { try { builder.RegisterAssemblyModules(Assembly.LoadFrom(registeredFile.Location)); RegisteredAssemblies.Add(registeredFile); } catch (Exception ex) { //Could not register assembly System.Diagnostics.Trace.WriteLine( $"{nameof(Resolver)}: Faild to load Assembly - {registeredFile.Name} from {registeredFile.Location} - Exception message: {ex.Message}"); } } _container = builder.Build(); ContainerPrepared = true; }
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; } } }
private void RegisterByConvention(IEnumerable <Assembly> assemblies) { var tempAssemblies = assemblies.ToList(); var interfaces = (from assembly in tempAssemblies from type in assembly.GetTypes() where type.IsInterface && !type.GetCustomAttributes(typeof(ExcludeFromRegistrationAttribute), true).Any() select type).ToList(); var tempRegistrations = (from @interface in interfaces from assembly in tempAssemblies 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)); foreach (var assembly in tempAssemblies) { if (RegisteredAssemblies.Contains(assembly)) { continue; } if (!_isDisableRequestorHandlerRegistrations) { RegisterHandlers(assembly); RegisterOneWayHandlers(assembly); } RegisterPostRegistrationTasks(assembly); RegisterCleanupTasks(assembly); RegisteredAssemblies.Add(assembly); } }