public override object ResolveValue(IResolveRequest request)
        {
            if (m_service != null)
            {
                return(m_service);
            }

            m_service = base.ResolveValue(request);

            return(m_service);
        }
Esempio n. 2
0
        public override object ResolveValue(IResolveRequest request)
        {
            if (!Contracts.Contains(request.Service))
            {
                return(null);
            }

            var constructors = Implementation.GetConstructors(BindingFlags.Instance | BindingFlags.Public);

            var constructor       = constructors.OrderBy(ct => ct.GetParameters().Length).First();
            var constructorParams = constructor.GetParameters().ToDictionary(pr => pr.Name, pr => pr.ParameterType);
            var bindings          = request.Root.RootBindings;

            if (!constructorParams.Any())
            {
                return(constructor.Invoke(null));
            }

            var parameters = new Dictionary <string, object>();

            foreach (var param in constructorParams)
            {
                if (bindings.All(bi => bi.Service != param.Value))
                {
                    throw new MissingConstructorParamException(request.Service, param.Key);
                }

                if (param.Value == request.Service)
                {
                    throw new CyclicDependencyException(param.Value, request.Service);
                }

                var binding            = bindings.First(bi => bi.Service == param.Value);
                var resolutionProvider = binding.Configuration.Provider;
                var resolutionRequest  = new ResolveRequest(request.Root, param.Value);

                parameters.Add(param.Key, resolutionProvider.ResolveValue(resolutionRequest));
            }

            var instance = constructor.Invoke(parameters.Values.ToArray());

            return(instance);
        }
Esempio n. 3
0
 public override object ResolveValue(IResolveRequest request)
 {
     return(Contracts.Contains(request.Service) ? m_service : null);
 }
 public abstract object ResolveValue(IResolveRequest request);