コード例 #1
0
        private bool TryBuildResolutionConstructor(
            ConstructorInformation constructor,
            ResolutionContext resolutionContext,
            IContainerContext containerContext,
            IEnumerable <InjectionParameter> injectionParameters,
            out TypeInformation failedParameter,
            out Expression[] parameterExpressions,
            bool skipUknownResolution = false)
        {
            var paramLength = constructor.Parameters.Length;

            parameterExpressions = new Expression[paramLength];
            failedParameter      = null;
            for (var i = 0; i < paramLength; i++)
            {
                var parameter = constructor.Parameters[i];

                parameterExpressions[i] = containerContext.ResolutionStrategy.BuildResolutionExpression(containerContext,
                                                                                                        resolutionContext, parameter, injectionParameters, skipUknownResolution);

                if (parameterExpressions[i] == null)
                {
                    failedParameter = parameter;
                    return(false);
                }
            }

            return(true);
        }
コード例 #2
0
        public ResolutionConstructor CreateResolutionConstructor(IContainerContext containerContext,
                                                                 IServiceRegistration serviceRegistration,
                                                                 ResolutionContext resolutionContext,
                                                                 ConstructorInformation constructor)
        {
            var paramLength          = constructor.Parameters.Length;
            var parameterExpressions = new Expression[paramLength];

            for (var i = 0; i < paramLength; i++)
            {
                var parameter = constructor.Parameters[i];

                var expression = containerContext.ResolutionStrategy.BuildResolutionExpression(containerContext,
                                                                                               resolutionContext, parameter, serviceRegistration.RegistrationContext.InjectionParameters);

                parameterExpressions[i] = expression ?? throw new ResolutionFailedException(serviceRegistration.ImplementationType,
                                                                                            $"Constructor {constructor.Constructor}, unresolvable parameter: ({parameter.Type}){parameter.ParameterName}");
            }

            return(new ResolutionConstructor {
                Constructor = constructor.Constructor, Parameters = parameterExpressions
            });
        }