public object Resolve(Type serviceType) { var genericArguments = _emptyTypeArray; var typeInfo = serviceType.GetTypeInfo(); if (typeInfo.IsGenericType && !_registrations.ContainsKey(serviceType) && typeInfo.GetGenericTypeDefinition() != typeof(IEnumerable <>)) { genericArguments = typeInfo.GetGenericArguments(); serviceType = typeInfo.GetGenericTypeDefinition(); typeInfo = serviceType.GetTypeInfo(); } IRegistration registration; if (!_registrations.TryGetValue(serviceType, out var registrations)) { if (serviceType == typeof(IResolver)) { return(this); } if (serviceType == typeof(IScopeResolver)) { return(new EventFlowIoCResolver(_singletons, _registrations, false)); } if (typeInfo.IsGenericType && typeInfo.GetGenericTypeDefinition() == typeof(IEnumerable <>)) { registration = EnumerableResolvers.GetOrAdd(serviceType, t => new EnumerableResolver(t)); return(Create(registration)); } throw new Exception($"Type {serviceType.PrettyPrint()} is not registered"); } registration = registrations.First(); return(Create(registration, genericArguments)); }
public object Resolve(Type serviceType) { List <Registration> registrations; var genericArguments = _emptyTypeArray; var typeInfo = serviceType.GetTypeInfo(); if (typeInfo.IsGenericType && !_registrations.ContainsKey(serviceType) && typeInfo.GetGenericTypeDefinition() != typeof(IEnumerable <>)) { genericArguments = typeInfo.GetGenericArguments(); serviceType = typeInfo.GetGenericTypeDefinition(); typeInfo = serviceType.GetTypeInfo(); } if (!_registrations.TryGetValue(serviceType, out registrations)) { if (serviceType == typeof(IResolver)) { return(this); } if (serviceType == typeof(IScopeResolver)) { return(BeginScope()); } if (typeInfo.IsGenericType && typeInfo.GetGenericTypeDefinition() == typeof(IEnumerable <>)) { return(EnumerableResolvers .GetOrAdd(serviceType, t => new EnumerableResolver(t)) .Create(_resolverContext)); } throw new Exception($"Type {serviceType.PrettyPrint()} is not registered"); } return(registrations.First().Create(_resolverContext, genericArguments)); }