private IEnumerable <ServiceRegistration> GetRegistrationsForType(Type type)
        {
            IEnumerable <ServiceRegistration> registrations = serviceRepository.GetOrDefaultByRef(type);

            if (!type.IsClosedGenericType())
            {
                return(registrations);
            }

            var openGenerics = serviceRepository.GetOrDefaultByRef(type.GetGenericTypeDefinition());

            if (openGenerics != null)
            {
                registrations = registrations == null ? openGenerics : openGenerics.Concat(registrations);
            }

            var variantGenerics = serviceRepository.Walk()
                                  .Where(r => r.Key.IsGenericType() &&
                                         r.Key.GetGenericTypeDefinition() == type.GetGenericTypeDefinition() &&
                                         r.Key != type &&
                                         r.Key.ImplementsWithoutGenericCheck(type))
                                  .SelectMany(r => r.Value).ToArray();

            if (variantGenerics.Length > 0)
            {
                registrations = registrations == null ? variantGenerics : variantGenerics.Concat(registrations);
            }

            return(registrations);
        }
Exemple #2
0
        private IEnumerable <ServiceRegistration> GetRegistrationsForType(Type type)
        {
            var registrations = repository.GetOrDefaultByRef(type);

            return(!type.IsClosedGenericType()
                ? registrations
                : repository.GetOrDefaultByRef(type.GetGenericTypeDefinition()));
        }
        public static bool ContainsRegistration(this ImmutableTree <Type, ImmutableBucket <object, ServiceRegistration> > repository, Type type, object name)
        {
            var registrations = repository.GetOrDefaultByRef(type);

            if (name != null && registrations != null)
            {
                return(registrations.GetOrDefaultByValue(name) != null);
            }

            if (registrations != null || !type.IsClosedGenericType())
            {
                return(registrations != null);
            }

            registrations = repository.GetOrDefaultByRef(type.GetGenericTypeDefinition());
            return(registrations?.Any(reg => type.SatisfiesGenericConstraintsOf(reg.ImplementationTypeInfo)) ?? false);
        }