I’ve been making use of a lightweight configuration based commanding framework in a recent project that proved to be really useful and so I’ve spun it out into an open source project on GitHub, documented it, and released the packages on NuGet.
What I’ve found most useful about it is that commands and actors are registered and configured using an IoC type syntax that also defines how dispatch and execution behave – by changing the configuration you can update your commands to run in memory, over HTTP or via Azure Storage queues without changing your actual application code.
It’s a set of .NET Standard assemblies and runs well with both ASP.Net and ASP.Net Core (along with WebJobs and other Azure type goodness). It’s designed specifically for dependency inversion and IoC containers and works with Unity, Autofac, Ninject and the out the box ASP.Net Core service container.
I’ve released it under the permissive MIT license and I hope it’s useful to you. If you get stuck or have any questions I’m best contacted on Twitter as @azuretrenches.
I first wrote this back in 2012 as a set of commonly useful abstractions for building applications on the cloud. It’s evolved over time but an awful lot of things have changed and grown in the last 5 years and although many of the core patterns and abstractions are still useful it’s become hindered by it’s own weight when put into a more recent context. When I wrote it all sorts of things that are effectively “off the shelf” now just didn’t exist. And of course, I hope, I’ve learned and grown as a developer and architect since then.
I’m also increasingly wanting to take advantage of new developments in the .NET space such as .NET Standard and ASP.Net Core and the AccidentalFish.ApplicationSupport framework is very much a .NET 4.x rooted framework.
All that being the case, and being mindful that a reasonable number of people are using this framework in production software, my intention is to place the current version (6.0.0) of the framework into maintenance mode and start afresh with a simplified framework aimed squarely at support .NET Standard and taking advantage of recent developments. That leaves the way open for future updates to the existing framework but lets me move forward with some major changes.
My goals for this major reworking include:
- .NET Standard support to enable use in as full a range as possible of .NET runtimes (Core, Framework, Xamarin etc.)
- Increased modularity of packages so you can use just what you need
- A removal of the configuration framework and replacement by an abstracted bridge to external configuration sources
- A removal of the logging abstraction framework and adoption of the abstraction layer provided by Microsoft in the Microsoft.Extensions.Logging.Abstractions package.
- A pulling apart of the dependency injection abstraction framework.
Before I release it I’ll be reworking a significantly sized product of my own (Simple Status Page) over to it which should mean it hits the open source world in reasonable shape.
The code will be on GitHub just as soon as I can figure out what to call it!
If you want to discuss this then the best thing to do is to get on touch with me on Twitter at @azuretrenches.