Beispiel #1
0
        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);
            }
        }
Beispiel #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;
                }
            }
        }