/// <summary> /// At some point, we'll scan for the assemblies where entities are defined. So, supply these assemblies. /// (Just the assembly names). /// <para>Alternatively, you can provide these assembly names in config file as a comma-separated list: /// AppSettings key should be "EntityAssemblies" /// </para> /// </summary> public static void AddEntityAssemblies(string[] entityAssemblies) { if (entityAssemblies != null) { foreach (var item in entityAssemblies) { EntityAssemblies.Add(item); } } }
public void Initialize(ContainerBuilder containerBuilder) { if (EntityAssemblies?.Length > 0) { if (DefaultRepositoryType == null) { throw new ArgumentNullException(nameof(DefaultRepositoryType)); } Type repositoryInterfaceType = typeof(IRepository <>); Type entityBaseType = typeof(IEntity); var entityTypeList = EntityAssemblies.SelectMany(assembly => assembly.DefinedTypes.Where(t => entityBaseType.IsAssignableFrom(t.AsType()) ) ); foreach (var entityTypeInfo in entityTypeList) { Type entityType = entityTypeInfo.AsType(); Type entityRepositoryType = DefaultRepositoryType.MakeGenericType(entityType); Type entityRepositoryInterfaceType = repositoryInterfaceType.MakeGenericType(entityType); containerBuilder.RegisterType(entityRepositoryType).As(entityRepositoryInterfaceType); } } if (RepositoryAssemblies?.Length > 0) { Type repositoryInterfaceType = typeof(IRepository); var repositoryTypeList = RepositoryAssemblies.SelectMany(assembly => assembly.DefinedTypes.Where(t => t.IsClass && repositoryInterfaceType.IsAssignableFrom(t.AsType()) ) ); foreach (var repositoryTypeInfo in repositoryTypeList) { Type repositoryType = repositoryTypeInfo.AsType(); containerBuilder.RegisterType(repositoryType).AsImplementedInterfaces(); } } ConfigureContainerBuilder(containerBuilder); }