Example #1
0
        public void BindChild(PropertyInfo property, Type childType, string prefix)
        {
            var target = Object;

            if (_propertyStack.Any(p => p.PropertyType == childType))
            {
                _propertyStack.Push(property);
                throw new FubuException(2202, "Infinite recursion detected while binding child properties: {0} would try to resolve {1} again.", string.Join("=>", _propertyStack.Reverse().Select(p => "{1}.{0}".ToFormat(p.Name, p.ReflectedType.Name)).ToArray()), childType.Name);
            }
            _propertyStack.Push(property);

            var resolver = _locator == null?ObjectResolver.Basic() : Service <IObjectResolver>();

            var context = prefixWith(prefix, _propertyStack.Reverse());

            try
            {
                resolver.TryBindModel(childType, context, result =>
                {
                    property.SetValue(target, result.Value, null);
                });
            }
            catch (Exception e)
            {
                LogProblem(e);
            }

            _problems.AddRange(context._problems);

            _propertyStack.Pop();
        }
Example #2
0
        public BindingContext(IRequestData requestData, IServiceLocator locator, IBindingLogger logger)
        {
            if (logger == null)
            {
                throw new ArgumentNullException("logger");
            }

            _requestData = requestData;
            _locator     = locator;
            _logger      = logger;
            _resolver    = new Lazy <IObjectResolver>(() =>
            {
                if (_locator == null)
                {
                    return(ObjectResolver.Basic());
                }

                return(_locator.GetInstance <IObjectResolver>());
            });

            _values = new Lazy <IContextValues>(() =>
            {
                var converter = _locator == null ? new ObjectConverter() : _locator.GetInstance <IObjectConverter>();
                return(new ContextValues(converter, _namingStrategies, _requestData, _logger));
            });
        }
Example #3
0
        public static ObjectResolver Basic()
        {
            var services = new InMemoryServiceLocator();
            var resolver = new ObjectResolver(services, new BindingRegistry(), new NulloBindingLogger());

            services.Add <IObjectResolver>(resolver);

            return(resolver);
        }
Example #4
0
        public static IObjectBlockReader Reader()
        {
            var registry = new BindingRegistry();
            registry.Add(new VersionConstraintConverter());
            registry.Add(new GroupedDependencyConverter());

            var services = new InMemoryServiceLocator();
            var resolver = new ObjectResolver(services, registry, new NulloBindingLogger());

            services.Add<IObjectResolver>(resolver);

            return new ObjectBlockReader(new ObjectBlockParser(), resolver, services, new RippleBlockRegistry());
        }
 public RecordingObjectResolver(IDebugReport report, ObjectResolver resolver)
 {
     _report = report;
     _resolver = resolver;
 }