AlinSpace.Commands 6.0.0

The ID prefix of this package has been reserved for one of the owners of this package by NuGet.org. Prefix Reserved
Suggested Alternatives

AlinSpace.Command

There is a newer version of this package available.
See the version list below for details.
The owner has unlisted this package. This could mean that the package is deprecated, has security vulnerabilities or shouldn't be used anymore.
dotnet add package AlinSpace.Commands --version 6.0.0
NuGet\Install-Package AlinSpace.Commands -Version 6.0.0
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="AlinSpace.Commands" Version="6.0.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add AlinSpace.Commands --version 6.0.0
#r "nuget: AlinSpace.Commands, 6.0.0"
#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 AlinSpace.Commands as a Cake Addin
#addin nuget:?package=AlinSpace.Commands&version=6.0.0

// Install AlinSpace.Commands as a Cake Tool
#tool nuget:?package=AlinSpace.Commands&version=6.0.0

<img src="https://github.com/onixion/AlinSpace.Commands/blob/main/Assets/Icon.png" width="200" height="200">

AsyncCommands

NuGet version (AsyncCommands)

A simple Async library for command and command manager patterns.

The IAsyncCommand interface is very similar to the ICommand interface, but they are not the same. The Async interface is a fully asynchronous command interface, whereas ICommand is not.

NuGet package

Examples - AsyncCommand

This is the AsyncCommand:

var asyncCommand = AsyncCommand
   .New()
   .OnCanChange(_ => canExecute)
   .OnExecuteAsync(ExecuteSomethingAsync);
   
var genericAsyncCommand = AsyncCommand
   .New<int>()
   .OnCanChange(_ => canExecute)
   .OnExecuteAsync(ExecuteSomethingWithIntAsync);
   

Examples - AbstractAsyncCommand

This is the AbstractAsyncCommand:

public class MyAsyncCommand : AbstractAsyncCommand
{
   ...
   public async Task ExecuteAsync(object parameter = null)
   {
       await DoSomethingAsync(parameter);
   }
   ...
}

public class MyGenericAsyncCommand<int> : AbstractAsyncCommand
{
   ...
   public async Task ExecuteAsync(int parameter = null)
   {
       await DoSomethingWithIntAsync(parameter);
   }
   ...
}

Examples - AsyncCommandManager

The AsyncCommandManager allows to create command groups. Command groups dictate the availability of command execution. Async commands are registered to one command group. When registering a AsyncCommand to a group, it will return an ICommand instance. This instance can be passed to the view that consumes the command. The command manager will hide all the logic for locking, unlocking, and notifying commands for you. Additionally, each registered Async command can also add instance-specific logic for CanExecute.

Here are some examples:

AsyncCommandManager
    .New()
    .LockAll(e => 
    {
       SaveCommand = e.Register(SaveAsyncCommand);
       DeleteCommand = e.Register(DeleteAsyncCommand);
    });

Each command group defines a group lock behavior. This behavior defines how the group will affect other groups when it gets locked. On default the command group lock is set to LockAllGroups, meaning all groups will be locked when a command is executed from this group. When an group is locked by at least one group, all commands registered to this group will not be able to execute until released by all groups.

These are the currently supported group lock behaviors:

  • LockAllGroups: Locks all groups when executing a command registered to this group.
  • LockOtherGroups: Locks all other groups when executing a command registered to this group.
  • LockThisGroup: Locks this group when executing a command registered to this group.

In the following example, SaveCommand and DeleteCommand will lock all commands registered to the command manager when executed. However, the SearchCommand will lock all commands registered to the command manager except itself when executed.

AsyncCommandManager
   .New()
   .LockAll(eg => 
   {
      SaveCommand = eg.Register(SaveAsyncCommand);
      DeleteCommand = eg.Register(DeleteAsyncCommand);
   })
   .LockAllOthers(eg => 
   {
      SearchCommand = eg.Register(SearchAsyncCommand);
   });

An important detail is that locking requirements can overlap. Here is an example: The Block10Command will do 10 seconds of work. The Block20Command will do 20 seconds of work.

AsyncCommandManager
    .New()
    .LockThis(eg => Block10Command = eg.Register(Block10Command))
    .LockAll(eg => Block20Command = eg.Register(Block20Command));

When you press the Block10Command the command manager will lock the Block10Command for 10 seconds. If you wait 5 seconds and then execute the Block20Command command, all commands will be locked for another 20 seconds. After waiting for 5 seconds the Block10Command will be done and unlock its group, but because the other command group still blocks all groups for another 15 seconds, Block10Command will stay blocked for 15 seconds. Block10Command and Block20Command will both be unlocked at the same time.

Product Compatible and additional computed target framework versions.
.NET net5.0 is compatible.  net5.0-windows was computed.  net6.0 was computed.  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 was computed.  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. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 is compatible. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETStandard 2.0

    • No dependencies.
  • .NETStandard 2.1

    • No dependencies.
  • net5.0

    • No dependencies.

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
6.1.8 792 11/9/2022
6.1.5 703 11/8/2022
6.1.3 722 11/1/2022
6.1.2 736 11/1/2022
6.1.1 733 10/12/2022
6.0.8 799 10/11/2022
6.0.6 836 2/9/2022
6.0.5 834 2/3/2022