public IBindingDefinition CreateRealBindingDefinition(Type type) { IBindingDefinition definition; if (!bindingDefinitionByType.TryGetValue(type, out definition)) { definition = BindingDefinitionFactory.CreateInstance(type, DefinitionDescription) ?? this; bindingDefinitionByType[type] = definition; } return(definition); }
public static BindingDefinitionHierarchical CreateInstance(Type type, BindingDefinitionDescription definitionDescription) { try { if (string.IsNullOrEmpty(definitionDescription.Name)) { definitionDescription.Name = definitionDescription.BindingExpression.Replace('.', '_'); } BindingDefinitionHierarchical definition = new BindingDefinitionHierarchical(definitionDescription); string realBindingDefinitionExpression = definitionDescription.BindingExpression.Split('.')[0]; BindingDefinitionDescription realBindingDefinitionDescription = new BindingDefinitionDescription() { BindingExpression = realBindingDefinitionExpression, IsReadOnly = definitionDescription.IsReadOnly }; definition.realBindingDefinition = BindingDefinitionFactory.CreateInstance(type, realBindingDefinitionDescription); string childBindingExpression = definitionDescription.BindingExpression.Substring(realBindingDefinitionExpression.Length + 1); BindingDefinitionDescription childBindingDescription = new BindingDefinitionDescription() { BindingExpression = childBindingExpression, IsReadOnly = definitionDescription.IsReadOnly }; definition.childBindingDefinition = BindingDefinitionFactory.CreateInstance(definition.realBindingDefinition.BindingType, childBindingDescription); definition.CanNotify = definition.childBindingDefinition.CanNotify; definition.BindingType = definition.childBindingDefinition.BindingType; // type; return(definition); } catch (Exception ex) { throw new BindingTemplateException($"Cannot create the 'Hierarchical BindingDefinition' '{definitionDescription.BindingExpression}'. {ex.Message}"); } }