private Type[] GetTypes(RegisterAssemblyType assemblyType) { List <Type> types = new List <Type>(); if (assemblyType == RegisterAssemblyType.All) { foreach (var ass in GetAssembly()) { types.AddRange(ass.GetTypes()); } } else if (assemblyType == RegisterAssemblyType.FromGeneric) { Assembly assembly = _parentType.Assembly; types.AddRange(assembly.GetTypes()); } else if (assemblyType == RegisterAssemblyType.Curent) { Assembly assembly = Assembly.GetExecutingAssembly(); types.AddRange(assembly.GetTypes()); } if (assemblyType == RegisterAssemblyType.FromGeneric) { foreach (var ass in _listAssembly) { types.AddRange(ass.GetTypes()); } } return(types.ToArray()); }
/// <summary> /// Метод регистрирующий все реализации/наследников родительского класса /// </summary> /// <typeparam name="T">Родитель</typeparam> /// <param name="assemblyType">Тип поиска наследников</param> /// <param name="listAssembly">список наследников</param> public void RegisterImplementation <T>(RegisterAssemblyType assemblyType = RegisterAssemblyType.FromGeneric, List <Assembly> listAssembly = null) { _parentType = typeof(T); _listAssembly = listAssembly ?? new List <Assembly>(); var types = GetTypes(assemblyType); var nededType = types.Where(t => _parentType.IsAssignableFrom(t) && _parentType.Name != t.Name ).ToList(); nededType.ForEach(x => { _builder.RegisterType(x); }); }
public override void Register(object builder) { ContainerBuilder containerBuilder = builder as ContainerBuilder; if (containerBuilder == null) { throw new ArgumentException("builder need type is ContainerBuilder"); } containerBuilder.RegisterType(SchemeType); containerBuilder.RegisterType(this.GetType()).OnActivating(p => p.ReplaceInstance(this)); RegisterAssemblyType.Register(this.GetType().Assembly, containerBuilder); registerExcelTaskManager(containerBuilder); OnRegister(containerBuilder); }
/// <summary> /// Метод регистрирующий все классы в обобщении где обобщенный класс имеет одного родителя /// </summary> /// <typeparam name="T">Родитель</typeparam> /// <param name="service">Сервис принимающий обобщение</param> /// <param name="iservice">Интерфейс</param> /// <param name="assemblyType">Тип поиска наследников</param> /// <param name="listAssembly">список наследников</param> public void RegisterGenericImplementation <T>(Type service, Type iservice, RegisterAssemblyType assemblyType = RegisterAssemblyType.FromGeneric, List <Assembly> listAssembly = null) where T : class { _parentType = typeof(T); _listAssembly = listAssembly ?? new List <Assembly>(); var types = GetTypes(assemblyType); var nededType = types.Where(t => _parentType.IsAssignableFrom(t) && _parentType.Name != t.Name ).ToList(); nededType.ForEach(x => { var comonSystemDictService = service; var iсomonSystemDictService = iservice; Type[] typeArgs = { x }; var comonSystemDictServiceDynamic = comonSystemDictService.MakeGenericType(typeArgs); var iсomonSystemDictServiceDynamic = iсomonSystemDictService.MakeGenericType(typeArgs); _builder.RegisterType(comonSystemDictServiceDynamic).As(iсomonSystemDictServiceDynamic).InstancePerLifetimeScope(); }); }