Skip to content

Latest commit

 

History

261 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

A zero-dependency foundational library for.NET that accelerates robust application development. Key features include an intelligent ModelBase for non-intrusive value comparison (Is()), immutable updates (With()), and a declarative ToString() via attributes.

A lightweight, runtime AOP library for automating INotifyPropertyChanged notifications. Keeps your build process simple and your code clean, using a high-performance, reflection-caching mechanism for fast runtime notifications.

A logging library for MVVM using Serilog and AOP. Features include declarative [Log] and [Measure] attributes, a UI-bindable logger for real-time log display, and intelligent filtering for INotifyPropertyChanged events.

A lightweight extension for the popular CommandLineParser library. It adds the missing piece: serializing a C# options object back into a command-line argument string.

A set of utilities to streamline REST API interactions. Features a fluent client for easy configuration of requests with bearer tokens and custom headers, and a flexible query builder for converting C# types into URL parameters.

A lightweight .NET reflection library designed to simplify complex tasks. Includes extension methods to recursively discover all events and methods from a type's complete hierarchy, including base classes and interfaces.

The key feature is a powerful utility to create a single, universal event handler that can subscribe to any event, regardless of its delegate signature, using dynamic method generation. Ideal for logging, tracing, or dynamic proxy scenarios.

Provides the core interfaces (IProxyInterceptor, IProxyInvocation), models, and attributes (ProxyTargetAttribute) for creating and using compile-time proxies with the OutWit.Common.Proxy.Generator. This package is required at runtime to implement the interception logic.

A C# Source Generator that automatically creates proxy classes for interfaces decorated with [ProxyTargetAttribute]. This generator enables compile-time interception of methods, properties, and events, eliminating runtime reflection for proxy creation.

Json (System.Text.Json) serialization tools/snippets. Provides intuitive extension methods for serialization, deserialization, deep cloning, and file I/O operations. Includes built-in support for source generation to maximize performance , along with custom converters for System.Type and System.Security.Cryptography.RSAParameters.

A helper library that simplifies and accelerates development with the MemoryPack serializer. Provides convenient extension methods for serialization, deserialization, cloning, and file I/O. Includes a built-in formatter for PropertyChangedEventArgs.

A collection of helpers and extension methods for MessagePack-CSharp to simplify serialization, deserialization, and object cloning. Provides built-in LZ4 compression support.

A collection of tools and helper classes to simplify serialization with protobuf-net. Provides extension methods for serialization, deserialization, and deep cloning, plus built-in support for common types like DateTimeOffset.

A form described as data: groups, tabs, fields, options and the conditions that decide what is live — serialisable, transferable, and enough for anybody to draw the form and keep it consistent while somebody types. Lets a plugin contribute a screen without shipping controls, so a second front end — a browser, a remote console, a different toolkit — becomes a renderer rather than a rewrite. Structure and the "this is off while that is off" conditions travel in the schema and are evaluated locally; what the values mean together stays with whoever declared the form, asked through IFormValidator. MemoryPack on the wire, and no other serialiser's attributes.

Carries the form model on a MessagePack wire for a product standardised on it: one call at startup, FormsMessagePack.Register(), scoped to the form model's assembly — so nothing else of that product's own becomes serialisable by accident.

A collection of essential helpers and components for WPF and the MVVM pattern. Includes a ViewModelBase, DelegateCommand, a thread-safe SafeObservableCollection, SortedCollection, powerful binding utilities, and an AOP [Bindable] attribute to easily create DependencyProperties.

ViewModel-first navigation for desktop applications — the regions, navigation and dialog part of Prism, without the container, the statics or the region adapters. Named outlets with a journal and guards; zones where modules contribute navigation bar entries and menu items; typed dialogs; start-up validation that reports a route with no view before a user finds it by clicking. View models are created through ActivatorUtilities, Transient routes get their own DI scope, and a screen that loads slowly never blocks the next navigation.

The Avalonia half: a ViewLocator that pairs view models with views through an explicit registry or a naming convention, a NavigationOutlet control that keeps a cached screen's view — and its scroll position — alive across navigations, and dialog hosts over modal windows or the overlay layer, with no external dependency.

The same for WPF, so a WPF application can drop Prism and Unity without leaving WPF: the locator doubles as a DataTemplateSelector, ViewPresenter shows the view of any view model, and dialogs are modal windows whose close button goes through the dialog's own CanCloseAsync.

UI modules over OutWit.Common.Plugins: a plugin that registers services, routes, views and contributions, loaded from a folder next to the application or compiled in. Same two-phase shape as every other OutWit plugin axis; a module that throws is recorded and logged while the rest carry on.

An extension library for NUnit that provides fluent assertion helpers (Assert.That(actual, Was.EqualTo(expected))) for testing custom objects inheriting from ModelBase in the OutWit.Common framework. It simplifies semantic equality checks by integrating the ModelBase.Is() method directly into the NUnit constraint model for more readable and expressive tests.

A lightweight set of abstractions for creating plugins for the OutWit.Common.Plugins framework. This package includes the core IWitPlugin interface, the WitPluginBase convenience class, and attributes (WitPluginManifest, WitPluginDependency) for defining plugin metadata and dependencies. Your plugin projects should reference this package.

A robust and flexible plugin system for .NET. Features dynamic discovery from directories, sophisticated dependency resolution (validates versions and detects circular dependencies), and isolated loading via AssemblyLoadContext to enable hot-reloading and unloading of plugins. It integrates seamlessly with Microsoft.Extensions.DependencyInjection for a modern, decoupled architecture.

License

Licensed under the Apache License, Version 2.0. See LICENSE.

Attribution (optional)

If you use OutWit.Common in a product, a mention is appreciated (but not required), for example: "Powered by OutWit.Common (https://ratner.io/)".

Trademark / Project name

"OutWit" and the OutWit logo are used to identify the official project by Dmitry Ratner.

You may:

  • refer to the project name in a factual way (e.g., "built with OutWit.Common");
  • use the name to indicate compatibility (e.g., "OutWit.Common-compatible").

You may not:

  • use "OutWit.Common" as the name of a fork or a derived product in a way that implies it is the official project;
  • use the OutWit.Common logo to promote forks or derived products without permission.

About

OutWit Common projects

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages