//-----------------------------------------------------------------------------------------------------------------------------------------------------
 private void ImplementLoadPropertiesMethod(ImplementationClassWriter<TypeTemplate.TInterface> writer, List<PropertyMember> properties)
 {
     writer.ImplementBase<ConfigurationSectionBase>().Method<XElement>(x => x.LoadProperties).Implement((m, xml) => {
         foreach ( var property in properties )
         {
             using ( TT.CreateScope<TT.TProperty>(property.PropertyDeclaration.PropertyType) )
             {
                 m.This<ConfigurationSectionBase>().Void<XElement, string, TT.TProperty>(
                     x => (a, b, c) => x.TryReadScalarValue<TT.TProperty>(a, b, ref c),
                     xml,
                     m.Const(property.Name),
                     property.BackingField.AsOperand<TT.TProperty>());
             }
         }
     });
 }
        //-----------------------------------------------------------------------------------------------------------------------------------------------------
        private void ImplementGetXmlNameMethod(ImplementationClassWriter<TypeTemplate.TInterface> writer)
        {
            var xmlName = ConfigurationSectionAttribute.From(Context.TypeKey.PrimaryInterface).XmlName;

            if ( string.IsNullOrEmpty(xmlName) )
            {
                xmlName = Context.TypeKey.PrimaryInterface.Name.TrimPrefix("I").TrimSuffix("Config");
            }

            writer.ImplementBase<ConfigurationSectionBase>().Method<string>(x => x.GetXmlName).Implement(m => m.Return(constantValue: xmlName));
        }