From 69eba99b71c33f7651c19510555f65eaec87083a Mon Sep 17 00:00:00 2001 From: cygon Date: Wed, 7 Aug 2024 16:41:43 +0200 Subject: [PATCH] Added NuGet package build recipe --- Nuclex.Support | 2 +- ReadMe.md | 246 ++++++++++++++++++++++++++++++++++ foundation-package-old.nuspec | 35 +++++ foundation-package.nuspec | 35 ++++- nuclex-logo.png | Bin 0 -> 35826 bytes 5 files changed, 311 insertions(+), 7 deletions(-) create mode 100644 ReadMe.md create mode 100644 foundation-package-old.nuspec create mode 100644 nuclex-logo.png diff --git a/Nuclex.Support b/Nuclex.Support index 54cab3a..e818fae 160000 --- a/Nuclex.Support +++ b/Nuclex.Support @@ -1 +1 @@ -Subproject commit 54cab3a63f4f678a3173dee3085d45268c560e8c +Subproject commit e818fae81012b0a819abcf2180b90eee1d998fb7 diff --git a/ReadMe.md b/ReadMe.md new file mode 100644 index 0000000..4f4c1f2 --- /dev/null +++ b/ReadMe.md @@ -0,0 +1,246 @@ +Nuclex Foundation Libraries +=========================== + +A set of clean and carefully designed utility classes for .NET. + +For specific documentation, see the individual projects in this package. + + +Settings (`.ini` / Windows Registry) +------------------------------------ + +Many applications have to store their settings in an external file or, +for pure Windows applications, in the registry. This can be tedious and +difficult to unit test, too. Nuclex.Support provides an autonomous ini +parser (which works cross-platform and does **not** rely on +`GetPrivateProfileString`). + +Furthermore, it uses an interface to provide the same functionality for +the Registry and in-memory settings. This lets you switch between storing +your settings in the registry, in an .ini file or constructing a settings +container in memory to appropriately unit-test your code with mock data. + +```csharp +static readonly string BasicCategoryName = "Basic"; +static readonly string HintsCategoryName = "Hints"; + +void saveSettings(ISettingStore settingsStore) { + settingsStore.Set(BasicCategoryName, "AskSaveOnQuit", this.askSaveOnQuit); + settingsStore.Set(BasicCategoryName, "ActivePanel", this.activePanelIndex); + settingsStore.Set(HintsCategoryName, "ShowNameHint", this.showNameHint); + // ... +} + +void saveSettingsToIni() { + var iniStore = new ConfigurationFileStore(); + saveSettings(iniStore); + + using(var writer = new StreamWriteR("awesome-app.ini")) { + iniStore.Save(writer); + writer.Flush() + } +} + +void saveSettingsToRegistry() { + using( + var registryStore = new WindowsRegistryStore( + RegistryHive.HKCU, "AwesomeApplication" + ) + ) { + saveSettings(registryStore); + } +} +``` + + +MVVM with Nuclex.Windows.Forms +------------------------------ + +This library implements the MVVM pattern through its `WindowManager` class: + +![The WindowManager and its related classes](./Documents/WindowManager.svg) + +The `WindowManager` keeps track of all open windows and their view models, +so your basic `Main()` method, which normally looks like this: + +```csharp +[STAThread] +static void Main() { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new MainForm()); +} +``` + +Now becomes this: + +```csharp +[STAThread] +static void Main() { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + + using(var windowManager = new WindowManager()) { + Application.Run(windowManager.OpenRoot()); + } +} +``` + +As you can see, we no longer mention the `MainForm` by name, instead we ask +the `WindowManager` to construct a new `MainViewModel` and also create a view +that displays it. + +It does so by using a "convention over configuration" approach, meaning it +assumes that if you request a view for `FlurgleSettingsViewModel`, it will +look for a view named `FlurgleSettingsView`, `FlurgleSettingsForm`, +`FlurgeSettingsWindow` or `FlurgleSettingsDialog` class and try to construct +an instance of that class. + +Furthermore, if that class implements the `IView` interface, the view model +will be assigned to its `DataContext` property, establishing +the View/ViewModel relationship. + + +Adding an IoC Container (Ninject) to the MVVM Example +----------------------------------------------------- + +In the previous example, the view and its view model were constructed using +`Activator.CreateInstance()` - a method provided by .NET that creates a new +instance via a type's default constructor. + +Most of the time, ViewModels have constructor parameters, however. For example +to provide the ViewModel with the data it is supposed to be an adapter for. +You can achieve that by constructing the ViewModel yourself and passing it +to the `WindowManager.OpenRoot()` or `WindowManager.ShowModal()` methods. + +A much better approach is to use a dependency injector - an IoC container with +automatic constructor parameter injection. My favorite one is Ninject (due to +its neat setup with a fluent interface), but you can use any container you +wish, simply by inheriting your own `WindowManager` class: + +```csharp +public class NinjectWindowManager : WindowManager { + + public NinjectWindowManager(IKernel kernel, IAutoBinder autoBinder = null) : + base(autoBinder) { + this.kernel = kernel; + } + + protected override object CreateInstance(Type type) { + return this.kernel.Get(type); + } + + private IKernel kernel; +} +``` + +Your `NinjectWindowManager` will now use `IKernel.Get()` to construct its +ViewModels, allowing their constructors to require any services and instances +you have set up in your Ninject kernel. + +```csharp +class MainViewModel { + + public MainViewModel(IMyService myService, IMySettings mySettings) { + // ... + } + +} +``` + + +Observable Base Class for Data Binding and ORMs +----------------------------------------------- + +.NET provides the `INotifyPropertyChanged` interface for objects to expose +an event that reports when a property of the object has changed. This is +used by data binding UI controls and some ORMs to detect when an object has +been changed and the UI or database need to be updated. + +It is a bit tedious to implement, so here's a base class to make it much +more pleasant to use: + +```csharp +class CreateUserViewModel : Observable { + + public string FirstName { + get { return this.firstName; } + set { + if(value != this.firstName) { + this.firstName = value; + OnPropertyChanged(nameof(FirstName)); + } + } + } + + private string firstName; + +} +``` + +There's an extension method for the consuming side, too, with proper handling +of *wildcard* change notifications that are often overlooked: + +```csharp +CreateUserViewModel ViewModel { get; set; } + +void onPropertyChanged(object sender, PropertyChangedEventArgs arguments) { + if(arguments.AreAffecting(nameof(ViewModel.FirstName))) { + this.firstNameLine.Text = ViewModel.FirstName; + } +} +``` + + +Cloning Objects +--------------- + +Whether you use the prototye design patten on complex objects or have another +reason, sometimes a deep clone of an object tree is needed. This library +provides three complete solutions to cloning objects in .NET: + +- The `SerializationCloner`. It uses .NET's BinarySerializer in a way that + will serialize your object tree regardless of whether your objects have + the `Serializable` attribute or not. This is the slowest, least efficient + object cloner, but it relies on built-in .NET classes only. + +- The `ReflectionCloner` uses .NET's reflection capabilities (that means + interrogating an object what fields and properties it has) to create + complete clones of an object, including any arrays and referenced objects. + This serializer has no setup time and has pretty decent performance. + +- The `ExpressionTreeCloner` uses Linq expression trees to generate tailored + cloning code for your classes at runtime. This method of cloning has a setup + time (meaning it takes longer the first time it is confronted with a new + class), but from the second clone onwards, is much faster than the others. + +All three object cloners can create *shallow clones* (meaning any references +to other object will be kept without copying the referenced objects, too) and +*deep clones* meaning any refeferenced objects (and their referenced objects) +will be cloned as well. Careful, this means event subscribers, such a forms +and unexpected hangers-on will be cloned, too. + +Furthermore, all three object cloners can create *property-based clones* +(where only those settings exposed via properties are cloned), which may skip +the non-exposed parts of an object, as well as *field-based clones* which +replicate all the data of a class - any private field and hidden state. + +```csharp +class Example { + public Example(Example child = null) { + Child = child; + } + public Example Child { get; private set; } +} + +class Test { + public static void CloneSomething() { + var test = new Example(new Example()); + + var reflectionCloner = new ReflectionCloner(); + var clone = reflectionCloner.DeepFieldClone(test); + + // Clone is now a complete copy of test, including the child object + } +} +``` \ No newline at end of file diff --git a/foundation-package-old.nuspec b/foundation-package-old.nuspec new file mode 100644 index 0000000..f1658ad --- /dev/null +++ b/foundation-package-old.nuspec @@ -0,0 +1,35 @@ + + + + Nuclex.Foundation + 1.1.0 + Nuclex Foundation Libraries + Markus Ewald + + false + Apache 2.0 + Set of basic libraries offering tools for MVVM-based UIs, storage of settings, license keys, collections and observer/subscriber pattern helpers + en-US + mvvm,util + + + + + + + + + + + + + + + + + + + + + + diff --git a/foundation-package.nuspec b/foundation-package.nuspec index 7fcd394..daec482 100644 --- a/foundation-package.nuspec +++ b/foundation-package.nuspec @@ -13,26 +13,49 @@ Set of basic libraries offering tools for MVVM-based UIs, storage of settings, license keys, collections and observer/subscriber pattern helpers en-US mvvm,util + nuclex-logo.png - - + + + + + + + - + + + + + + + + + - - + + + + + + + + + + + - + \ No newline at end of file diff --git a/nuclex-logo.png b/nuclex-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..dd743e333c53d6f51b7d8bfa365246f7e77de47f GIT binary patch literal 35826 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 literal 0 HcmV?d00001