示例#1
0
        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;
        }
示例#2
0
        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;
                }
            }
        }
示例#3
0
        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);
            }
        }