ResultCommander.Autofac 2.1.3

There is a newer version of this package available.
See the version list below for details.
dotnet add package ResultCommander.Autofac --version 2.1.3                
NuGet\Install-Package ResultCommander.Autofac -Version 2.1.3                
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.1.3" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add ResultCommander.Autofac --version 2.1.3                
#r "nuget: ResultCommander.Autofac, 2.1.3"                
#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.1.3

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

ResultCommander

Build Status

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://docs.result-commander.mikym.me/.

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 SimpleCommand : ICommand
{
    public bool IsSuccess { get; }
    
    public SimpleCommand(bool isSuccess = true)
        => IsSuccess = isSuccess;
}

And a synchronous handler that handles it:

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

A command with a concrete result:

public SimpleCommandWithConcreteResult : ICommand<int>
{
    public bool IsSuccess { get; }
    
    public SimpleCommand(bool isSuccess = true)
        => IsSuccess = isSuccess;
}

And a synchronous handler that handles it:

public SimpleSyncCommandHandlerWithConcreteResult : ISyncCommandHandler<SimpleCommand, int>
{
    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 was computed.  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 130 7/23/2024
2.2.3 236 1/22/2024
2.2.2 229 11/22/2023
2.2.1 128 11/20/2023
2.2.0 111 11/20/2023
2.1.6 159 8/18/2023
2.1.5 157 8/8/2023
2.1.4 168 7/10/2023
2.1.3 154 6/25/2023
2.1.2 151 5/10/2023
2.1.1 172 4/4/2023