public bool TryResolve(Type serviceType, out object instance) { instance = null; var profile = ResolveProfiles.Find(serviceType, this, Registrations); return(profile != null && profile(Registrations(), this, out instance)); }
public override bool TryResolve(IDependencyRegistrationCollection registrations, ResolveContext resolveContext, out object instance) { var serviceTypeRegistrations = registrations[typeof(T)].ToArray(); instance = null; var instances = new T[serviceTypeRegistrations.Length]; for (var i = 0; i < serviceTypeRegistrations.Length; i++) { var profile = ResolveProfiles.Find(resolveContext, serviceTypeRegistrations[i]); if (!profile(registrations, resolveContext, out instance)) { throw new DependencyResolutionException($"Could not resolve an enumerable for {serviceTypeRegistrations[i].ConcreteType}"); } instances[i] = (T)instance; } instance = instances; return(true); }
public override bool TryResolve(IDependencyRegistrationCollection registrations, ResolveContext resolveContext, out object instance) { var serviceTypeRegistrations = registrations[typeof(T)].ToArray(); instance = null; var instances = new T[serviceTypeRegistrations.Length]; for (var i = 0; i < serviceTypeRegistrations.Length; i++) { var profile = ResolveProfiles.Find(resolveContext, serviceTypeRegistrations[i]); if (!profile(registrations, resolveContext, out instance)) { return(false); } instances[i] = (T)instance; } instance = instances; return(true); }
public static ProfileResolver Find(ResolveContext context, DependencyRegistration registration) { var serviceType = registration.ServiceType; if (serviceType.IsGenericType == false || serviceType.GetGenericTypeDefinition() != typeof(Func <>)) { return(null); } var innerType = serviceType.GetGenericArguments()[0]; var innerProfile = ResolveProfiles.Find(context, registration); ProfileResolver getTypedResolver(ProfileResolver resolver) { var profile = (ResolveProfile)Activator.CreateInstance(typeof(FuncProfile <>).MakeGenericType(innerType), innerProfile); return(profile.TryResolve); } return(innerProfile != null?getTypedResolver(innerProfile) : null); }