Beachten Sie, dass die vollständige Dokumentation einschließlich Anleitungen und einer API-Referenz auf der Hilfeseite zu finden ist.
Außerdem habe ich in einer Reihe von Beiträgen auf meinem Blog eine Reihe über den Übergang von der „Zwiebelschicht“-Architektur zur Verwendung eines vermittelten Befehlsmusters verfasst.
AzureFromTheTrenches.Commanding ist ein konfigurationsbasiertes asynchrones Befehlsmediator-Framework mit einer Reihe wichtiger Designziele:
Um diese Ziele zu unterstützen, unterstützt das Framework .NET Standard 2.0 (und höher) und kann daher in einer Vielzahl von Szenarien verwendet werden. Darüber hinaus stehen eine Reihe vollständig optionaler Erweiterungspakete zur Verfügung, die Folgendes ermöglichen:
Sie müssen diese Funktionalität nicht nutzen, können sie aber, wenn Sie möchten, im Laufe der Zeit übernehmen, ohne Ihren Kerncode zu ändern.
Installieren Sie zunächst das Nuget-Paket für den Befehl:
Install-Package AzureFromTheTrenches.Commanding
Als Beispiel erstellen wir einen Befehl, der zwei Zahlen addiert und ein Ergebnis zurückgibt:
public class MathResult
{
public int Value { get; set; }
}
public class AddCommand : ICommand
{
public int FirstNumber { get; set; }
public int SecondNumber { get; set; }
}
Befehle werden von Handlern bearbeitet und unser Add-Handler sieht so aus:
public AddCommandHandler : ICommandHandler
{
public Task ExecuteAsync(AddCommand command, MathResult previousResult)
{
return new MathResult {
Value = command.FirstNumber + command.SecondNumber
};
}
}
Nachdem wir unseren Befehl, unser Ergebnis und unseren Handler definiert haben, müssen wir diese beim Befehlssystem registrieren. Wenn Sie nur eine Konsolen-App schreiben, können Sie dies in Program.cs tun, aber für eine realistischere Verwendung würden Sie dies dort tun, wo Sie Ihren IoC-Container konfigurieren – es ist praktisch, sich Befehlsregistrierungen nur als einen weiteren Teil Ihrer Anwendungskonfiguration vorzustellen. Außerdem benötigen Sie Zugriff auf den Container. Das folgende Beispiel zeigt die Registrierung beim Microsoft ASP.Net Core Service Provider:
// First register the commanding framework with the IoC container
IServiceProvider serviceProvider = null;
IServiceCollection serviceCollection = new ServiceCollection();
CommandingDependencyResolverAdapter adapter = new CommandingDependencyResolverAdapter(
(fromType, toInstance) => services.AddSingleton(fromType, toInstance),
(fromType, toType) => services.AddTransient(fromType, toType),
(resolveTo) => _serviceProvider.GetService(resolveTo));
ICommandRegistry registry = adapter.AddCommanding();
serviceProvider = serviceCollection.BuildServiceProvider();
// Now register our handler
registry.Register();
Die CommandingDependencyResolverAdapter -Klasse ist ein Adapter, der die Registrierung des Frameworks bei jedem IoC-Container ermöglicht. Die AddCommanding -Methode registriert die injizierbaren Befehlsschnittstellen und gibt eine ICommandRegistry- Schnittstelle zurück, mit der Sie Handler registrieren können. Sie müssen nur einen Handler registrieren, das Framework wird funktionieren Den Rest erledigt die Registrierung und nutzt einen flüssigen API-Stil für prägnanten, lesbaren Code.
Um unseren Befehl zu versenden, müssen wir die ICommandDispatcher-Schnittstelle erreichen und den Befehl senden. Wir machen das und geben das Ergebnis an die Konsole aus:
ICommandDispatcher commandDispatcher = dependencyResolver.ServiceProvider.GetService();
MathResult mathResult = await commandDispatcher.DispatchAsync(new AddCommand { FirstNumber = 5, SecondNumber = 6});
Console.WriteLine(mathResult.Value); // hopefully says 11
Und für den einfachen Gebrauch ist das alles. Dieses Beispiel ist etwas gekünstelt, da wir Abhängigkeiten manuell auflösen und es eine Menge Muster zum Addieren zweier Zahlen gibt, aber in realen Szenarien müssen Sie eigentlich nur Ihre Befehlshandler an der entsprechenden Stelle registrieren, zum Beispiel wenn Sie Wenn Sie ASP.Net Core verwenden, ist das gesamte Boilerplate für die Abhängigkeitsinjektion vorhanden.
Einfache Befehlsausführung im Speicher https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/InMemoryCommanding
Versenden von Befehlen über HTTP https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/HttpCommanding.Client
Ausführen von Befehlen als Reaktion auf HTTP-Anfragen (ASP.Net Core) https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/HttpCommanding.Web
Senden an und Ausführen von Azure Storage-Warteschlangen https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/AzureStorageQueueCommanding
Azure-Speicherüberwachung https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/AzureStorageAuditing
Azure Event Hub-Überwachung https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/AzureEventHubAuditing
Weitere Einsatzszenarien finden Sie im Wiki, darunter:
Wenn Sie nicht weiterkommen, melden Sie ein GitHub-Problem oder besuchen Sie mich auf Twitter unter @azuretrenches und ich helfe Ihnen, wenn ich kann.