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(); }
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)); }); }
public static ObjectResolver Basic() { var services = new InMemoryServiceLocator(); var resolver = new ObjectResolver(services, new BindingRegistry(), new NulloBindingLogger()); services.Add <IObjectResolver>(resolver); return(resolver); }
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; }