ResultCommander.Autofac 2.2.4

dotnet add package ResultCommander.Autofac --version 2.2.4                
NuGet\Install-Package ResultCommander.Autofac -Version 2.2.4                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="ResultCommander.Autofac" Version="2.2.4" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add ResultCommander.Autofac --version 2.2.4                
#r "nuget: ResultCommander.Autofac, 2.2.4"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install ResultCommander.Autofac as a Cake Addin
#addin nuget:?package=ResultCommander.Autofac&version=2.2.4

// Install ResultCommander.Autofac as a Cake Tool
#tool nuget:?package=ResultCommander.Autofac&version=2.2.4                

NuGetNuGet Build Status GitHub License Static Badge

ResultCommander

Library featuring a command handler pattern for both synchronous and asynchronous operations.

Uses a functional Result approach for failure-prone operations.

To utilize all features using Autofac is required.

Features

  • Synchronous and asynchronous command handler definitions
  • Definitions and base implementations of commands
  • Supports decorators and adapters via Autofac's methods

Description

There are two command types - one that only returns a Result and one that returns an additional entity contained within the Result.

Every handler must return a Result struct which determines whether the operation succedeed or not, handlers may or may not return additional results contained within the Result struct - this is defined by the handled comand.

Installation

To register handlers with the DI container use the ContainerBuilder or IServiceCollection extension methods provided by the library:

builder.AddResultCommander(assembliesToScan);

To register decorators or adapters use the methods available on ResultCommanderConfiguration like so:

builder.AddResultCommander(assembliesToScan, options => 
{
    options.AddDecorator<FancyDecorator, ISyncCommandHandler<SimpleCommand>();
});

You can register multiple decorators and they'll be applied in the order that you register them - read more at Autofac's docs regarding decorators and adapters.

Documentation

Documentation available at https://mikym.github.io/ResultCommander/.

Download

  • ResultCommander - NuGet
  • ResultCommander.Autofac - NuGet

Example usage

<b> You should never throw exceptions from within handlers, they should be exception free - instead return appropriate error results (and catch possible exceptions).</b> Library offers a simple error catching, logging and exception to result error decorators for uses where writing try-catch blocks becomes a pain - but remember that these results will never be as informative as manually returned proper result error types.

A command without a concrete result:

public record SimpleCommand(bool IsSuccess) : ICommand;

And a synchronous handler that handles it:

public class SimpleSyncCommandHandler : ISyncCommandHandler<SimpleCommand>
{
    public Result Handle(SimpleCommand command)
    {
        if (command.IsSuccess)
            return Result.FromSuccess();
            
        return new InvalidOperationError();
    }
}

A command with a concrete result:

public record SimpleCommandWithConcreteResult(bool IsSuccess) : ICommand<int>;

And an asynchronous handler that handles it:

public SimpleAsyncCommandHandlerWithConcreteResult : IAsyncCommandHandler<SimpleCommand, int>
{
    public async Task<Result<int>> Handle(SimpleCommand command)
    {
        if (command.IsSuccess)
            return 1;
            
        return new InvalidOperationError();
    }
}
Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
2.2.4 138 7/23/2024
2.2.3 242 1/22/2024
2.2.2 233 11/22/2023
2.2.1 133 11/20/2023
2.2.0 116 11/20/2023
2.1.6 163 8/18/2023
2.1.5 161 8/8/2023
2.1.4 172 7/10/2023
2.1.3 159 6/25/2023
2.1.2 155 5/10/2023
2.1.1 176 4/4/2023