Microsoft Pattern and Practice Configuration Block has been removed because Everyone can easily roll their own.
So here are some basics of Configuration interface with REST backing store.
(1) REST backstorage has very standard CRUD interface
public class RESTConfigurationStorage : IConfigurationStorage
{
public void Save(IConfigurationSectionHandlerForStorage configurationSection, string configurationId)
public bool Load(IConfigurationSectionHandlerForStorage configurationSection, string configurationId)
public void Create(IConfigurationSectionHandlerForStorage configurationSection, string configurationId, string parent)
public void Delete(IConfigurationSectionHandlerForStorage configurationSection, string configurationId)
}
Note that there are interfaces for CRUD, Sectional data. While this follows original config xml format. the
real purpose is to allow C# code get/set user configuration data methodically.
public interface IConfigurationStorage
{
void Save(IConfigurationSectionHandlerForStorage configurationSection, string configurationId);
bool Load(IConfigurationSectionHandlerForStorage configurationSection, string configurationId);
void Create(IConfigurationSectionHandlerForStorage configurationSection, string configurationId, string parent);
void Delete(IConfigurationSectionHandlerForStorage configurationSection, string configurationId);
}
public interface IConfigurationSectionHandlerForStorage : IConfigurationSection, INotifyPropertyChanged
{
IEnumerable<string> ValuePropertyNames { get; }
IEnumerable<string> DefaultPropertyNames { get; }
void SetDefaultValue(string propertyName, string value);
string GetDefinedDefaultValue(string propertyName);
void RemoveDefaultValue(string propertyName);
void ResetDirtyFlag();
}
public interface IConfigurationSection : INotifyPropertyChanged
{
string this[string propertyName] { get; set; }
IEnumerable<string> PropertyNames { get; }
IEnumerable<string> ValuePropertyNames { get; }
event Action DirtyFlagChanged;
event Action PropertyDirtyFlagChanged;
T GetProperty<T>(string propertyName);
T GetProperty<T>(string propertyName, T defaultValue);
void SetProperty<T>(string propertyName, T value);
IConfigurationSection SubConfiguration(string prefix); // sub is recursive
}
(2) in a WPF app, Unity Container makes a user setting singleton and allow every VM or presenter
get and set user level setting all the way to the backing store.
Note the real implementation is to Save using REST calls serializing all changes on UserSetting object
public interface IConfiguration : IConfigurationSection, INotifyPropertyChanged
{
void SaveConfigurationSection(string configurationSectionId);
void SaveAllConfigurationSections(); // this will go to Storage services
}
private UnityContainer _container;
IConfigurationSection s;
var userSettings = _container.Resolve<IUserSettings>();
// All storage actions are related to UserSetting persistence.
var config = new ConfigurationService(userSettings, "Core");
// So all Section are refering to UserSetting in DI.
_container.RegisterInstance<IConfigurationSection>(userSettings.Configuration);
_container.RegisterInstance<IConfigurationService>(config);
// Have a name will allow different instance of the same services.
_container.RegisterInstance<IConfigurationService>("Core", config);
}
}
public interface IConfigurationService
{
}
public class ConfigurationService : IConfigurationService
{
private readonly IConfiguration _configuration;
public ConfigurationService(IUserSettings userSettings, String propertyNamespace)
{
}
public void Save()
{
_configuration.SaveConfigurationSection("id");
}
}
Thursday, March 17, 2016
REST Backing store for user setting configuration persistence
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment