public SettingsCollectionDTO GenerateDTO(SettingsCollectionBase settingsCollection) { var dto = new SettingsCollectionDTO(); var settingCollectionType = settingsCollection.GetType(); dto.TypeFullName = settingCollectionType.FullName; dto.AssemblyFullName = settingCollectionType.Assembly.FullName; dto.TypeAssemblyQualifiedName = settingCollectionType.AssemblyQualifiedName; // Translate properties var properties = GetType().GetProperties() .Where(p => typeof(SettingBase).IsAssignableFrom(p.PropertyType)); foreach (var prop in properties) { var set = (SettingBase)prop.GetValue(settingsCollection); var settingDto = new SettingDTO(); settingDto.Name = prop.Name; settingDto.ValueTypeFullName = set.ValueType.FullName; settingDto.ValueTypeAssemblyQualifiedName = set.ValueType.AssemblyQualifiedName; settingDto.ValueAssemblyFullName = set.ValueType.Assembly.FullName; settingDto.ValueTypeAssemblyQualifiedName = set.ValueType.AssemblyQualifiedName; settingDto.Value = set.Value; } return(dto); }
/// <summary> /// Add a new settings collection /// </summary> /// <param name="settingsCollection"></param> /// <remarks>Raises an invalid argument exception if the Collection is not direct sub class of SettingsCollectionBase</remarks> public void AddSettingsCollection(SettingsCollectionBase settingsCollection) { if (settingsCollection.GetType().BaseType != typeof(SettingsCollectionBase)) { throw new ArgumentException("The collection type must be directly derived from SettingsCollectionBase. Multi-level inheritance is not supported"); } lock (_settingsCollections) { _settingsCollections.Add(settingsCollection); } }