0% found this document useful (0 votes)
29 views

Introducing SimpleSamSettings - CodeProject

This document introduces SimpleSamSettings, a cross-platform and scalable settings framework for .NET applications. The framework allows defining settings classes that can be persisted to disk in JSON or binary format. It supports features like automatic saving, undoing changes, and encapsulating settings into multiple classes.

Uploaded by

Gabriel Gomes
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
29 views

Introducing SimpleSamSettings - CodeProject

This document introduces SimpleSamSettings, a cross-platform and scalable settings framework for .NET applications. The framework allows defining settings classes that can be persisted to disk in JSON or binary format. It supports features like automatic saving, undoing changes, and encapsulating settings into multiple classes.

Uploaded by

Gabriel Gomes
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

30/11/2018 Introducing SimpleSamSettings - CodeProject

Introducing SimpleSamSettings
outbred, 17 Oct 2018

A simple (duh!), Cross-Platform, and Scalable Settings Framework

Download source file - 8.4 KB

Introduction
SimpleSamSettings is a framework based on the idea that many distinct settings classes are better than one huge one.
Persistence is configurable (Save after every change? Turn off persistence for in memory only?), as is the location.

Every application requires user-, application-, and other defined settings. The maintenance of these settings can be horrendous
over time if not property architectured and maintained.

SimpleSamSettings aims to ease the burden of creating, managing, saving, and restoring settings for any application in
.NET Standard.

Available on nuget here and github here.

Background
This architecture has been in my production code for many years now, and I've recently re-written it for the open source
community. Tried and true, hopefully it can handle anything you throw at it!

Using the Code


public class MySettings : OverwriteSettingsProfile<MySettings>
{
public string SomeProp
{
get => Get<string>();
set => Set(value);
}
}

Globals.SettingsFileBasePath = Path.Combine(Environment.GetFolderPath
(Environment.SpecialFolder.ApplicationData), "MyAppName");

That's it! Your settings will be persisted to %appdata%/MyAppName/MySettings.settings in JSON format. Prefer binary? No
problem! Put the [Serializable] tag on it and it will auto-serialize as binary.

By default, each change updates the file on disk. To turn off this behavior, simply set AutoSave to false, like this:

var settings = new MySettings() { AutoSave = false };

https://www.codeproject.com/Articles/1263458/Introducing-SimpleSamSettings?display=Print 1/3
30/11/2018 Introducing SimpleSamSettings - CodeProject
...then at any time, you can save it (say, on application exit):

settings.SaveInstance() OR MySettings.Save(); // OverwriteSettingsProfile<>


// ensures a singleton instance, so it is a static
helper method

Undoing Settings Changes - The Easy Way!


Say you have a dialog open for the user to change settings. The settings changes are live, ideally, but if the user clicks 'Cancel'
everything they've done during the lifetime of that dialog should be undone. Easy peasy!

Simply set the 'MakeUndoable' flag in the base to true.

settings.MakeUndoable = true;

... do your stuff in the dialog ...

To cancel or undo everything:

settings.RevertChanges();

Then set MakeUndoable back to false so it doesn't save off changes:

settings.MakeUndoable = false;

Usage Advice
Encapsulate your settings into small classes - many, properly encapsulated classes is preferred over one or a few very large
ones! This makes it easier to maintain, easier to use and reuse, and speeds up disk I/O.

NOTE

If a collection or object inside the settings class changes, the file will not be autosaved. It is recommended that the settings class
listens for changes on those objects and auto-saves them, as appropriate, but this is in no way enforced and left entirely up to the
consumer (you). Happy settings coding!

History
15th October, 2018: Initial public release

License
This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

https://www.codeproject.com/Articles/1263458/Introducing-SimpleSamSettings?display=Print 2/3
30/11/2018 Introducing SimpleSamSettings - CodeProject

outbred
Software Developer (Senior)
United States

Senior Software Developer/Lead/Architect for all things .NET/C#. Passionate about the SDLC and architecture.

Comments and Discussions


10 messages have been posted for this article Visit https://www.codeproject.com/Articles/1263458/Introducing-
SimpleSamSettings to post and view comments on this article, or click here to get a print view with messages.

Permalink | Advertise | Privacy | Cookies | Terms of Use | Mobile Article Copyright 2018 by outbred
Web03 | 2.8.181129.1 | Last Updated 17 Oct 2018 Everything else Copyright © CodeProject, 1999-2018

https://www.codeproject.com/Articles/1263458/Introducing-SimpleSamSettings?display=Print 3/3

You might also like