請注意,可以在說明網站上找到包括指南和 API 參考的完整文件。
我還在我的部落格上發布了一系列關於從「洋蔥層」架構轉向使用中介命令模式的系列文章。
AzureFromTheTrenches.Commanding 是一個基於配置的非同步命令中介框架,具有許多關鍵設計目標:
為了支援這些目標,該框架支援 .NET Standard 2.0(及更高版本),因此可以在各種場景中使用,並且可以使用許多完全可選的擴充包來啟用:
您不需要利用該功能,但如果您願意,您可以隨著時間的推移採用它,而無需更改核心程式碼。
首先安裝nuget包用於命令:
Install-Package AzureFromTheTrenches.Commanding
作為範例,讓我們建立一個將兩個數字相加並傳回結果的命令:
public class MathResult
{
public int Value { get; set; }
}
public class AddCommand : ICommand
{
public int FirstNumber { get; set; }
public int SecondNumber { get; set; }
}
命令由處理程序執行,我們的新增處理程序如下所示:
public AddCommandHandler : ICommandHandler
{
public Task ExecuteAsync(AddCommand command, MathResult previousResult)
{
return new MathResult {
Value = command.FirstNumber + command.SecondNumber
};
}
}
定義了命令、結果和處理程序後,我們需要將它們註冊到命令系統。如果您只是編寫一個控制台應用程序,您可以在Program.cs 中執行此操作,但為了更實際的使用,您可以在配置IoC 容器時執行此操作- 將命令註冊視為應用程式配置的另一部分很方便,除此之外,您還需要訪問該容器。下面的範例示範了向 Microsoft ASP.Net Core 服務提供者註冊:
// 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();
CommandingDependencyResolverAdapter類別是一個適配器,允許框架向任何 IoC 容器註冊, AddCommanding方法註冊可注入的命令接口並返回一個ICommandRegistry接口,該接口允許您註冊處理程序 - 您只需要註冊一個處理程序,框架就會計算其餘部分和註冊使用流暢的API 風格來實現簡潔可讀的程式碼。
為了調度我們的命令,我們需要取得 ICommandDispatcher 介面並發送命令。我們將這樣做並將結果輸出到控制台:
ICommandDispatcher commandDispatcher = dependencyResolver.ServiceProvider.GetService();
MathResult mathResult = await commandDispatcher.DispatchAsync(new AddCommand { FirstNumber = 5, SecondNumber = 6});
Console.WriteLine(mathResult.Value); // hopefully says 11
對於簡單的用法來說就是這樣。這個例子有點人為,因為我們手動解決依賴關係,並且有很多樣板將兩個數字相加,但在現實世界中,您真正需要做的就是在適當的位置註冊您的命令處理程序,例如,如果您正在使用ASP.Net Core,那麼所有相依性注入樣板都已就位。
簡單的記憶體指令執行 https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/InMemoryCommanding
透過 HTTP 調度指令 https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/HttpCommanding.Client
執行命令以回應 HTTP 請求 (ASP.Net Core) https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/HttpCommanding.Web
調度到 Azure 儲存佇列並從中執行 https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/AzureStorageQueueCommanding
Azure 儲存審核 https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/AzureStorageAuditing
Azure 事件中心審核 https://github.com/JamesRandall/AzureFromTheTrenches.Commanding/tree/master/Samples/AzureEventHubAuditing
更多使用場景可以在 wiki 中找到,包括:
如果您遇到困難,請記錄 GitHub 問題或透過 Twitter @azuretrenches 聯繫我,我會盡可能提供協助。