public List <Type> FindImplemenationsOf(Type serviceType) { return(_typeCache .GetTypes(AutoType.Implementation) .Where(x => !x.IsAbstract) .Where(IsServiceImplementation).ToList()); bool IsServiceImplementation(Type concreteType) { var interfaces = concreteType.GetInterfaces(); if (!interfaces.Any()) { return(false); } return(interfaces.Any(x => x == serviceType) || interfaces.Any(@interface => IsGenericTypeImplementation(serviceType, @interface))); } }
public void Populate(IServiceCollection serviceCollection, LifeTime lifeTime, bool includeOpenGenericWireup) { foreach (var abstraction in _typeCache.GetTypes(AutoType.Abstraction)) { var types = _implementationsFinder.FindImplemenationsOf(abstraction); if (!includeOpenGenericWireup && types.All(x => x.IsGenericType)) { return; } var dependencyType = types.FirstOrDefault(type => _serviceTypeNameFilter.IsMatch(abstraction, type)); switch (lifeTime) { case LifeTime.Singleton: RegisterDependency(serviceCollection.AddSingleton, abstraction, dependencyType); break; case LifeTime.Transient: RegisterDependency(serviceCollection.AddTransient, abstraction, dependencyType); break; } } }
public IEnumerable <Type> GetTypes(Type baseType) { return(_cache.GetTypes(baseType)); }