Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
            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);
            }