Merq.DependencyInjection 2.0.0
前缀已预订
dotnet add package Merq.DependencyInjection --version 2.0.0
NuGet\Install-Package Merq.DependencyInjection -Version 2.0.0
<PackageReference Include="Merq.DependencyInjection" Version="2.0.0" />
paket add Merq.DependencyInjection --version 2.0.0
#r "nuget: Merq.DependencyInjection, 2.0.0"
// Install Merq.DependencyInjection as a Cake Addin #addin nuget:?package=Merq.DependencyInjection&version=2.0.0 // Install Merq.DependencyInjection as a Cake Tool #tool nuget:?package=Merq.DependencyInjection&version=2.0.0
var builder = WebApplication.CreateBuilder(args);
...
builder.Services.AddMessageBus();
所有命令处理程序和事件生成器都需要像往常一样与服务集合注册,使用组件的主要接口,例如 ICommandHandler<T>
和 IObservable<TEvent>
。
注意: Merq 对已注册组件的生存期没有假设,因此注册组件的生存期取决于消费者。
要极大地简化处理程序和生成器的注册,我们推荐使用 Devlooped.Extensions.DependencyInjection.Attributed 包,它提供了一个基于属性的简单机制,在编译时自动发出标记为提供了 [Service]
属性的所有类型的所需服务注册,它还允许设置组件生存期,例如 [Service(ServiceLifetime.Transient)]
(为此依赖生成器包的默认生存期是 ServiceLifetime.Singleton
)。
这允许简单地标记所有命令处理程序和事件生成器为 [Service]
,然后一次性使用一行代码将它们全部注册。
builder.Services.AddServices();
遥测和监控
《IMessageBus》的核心实现被添加了《ActivitySource》和《Metric》的监视器,提供了开箱即用的基于Open Telemetry的监控支持,以及通过《dotnet trace》和《dotnet counters》进行监控。
为了使用Open Telemetry导出遥测数据,例如
using var tracer = Sdk
.CreateTracerProviderBuilder()
.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("ConsoleApp"))
.AddSource(source.Name)
.AddSource("Merq")
.AddConsoleExporter()
.AddZipkinExporter()
.AddAzureMonitorTraceExporter(o => o.ConnectionString = config["AppInsights"])
.Build();
通过《dotnet-trace》收集跟踪
dotnet trace collect --name [PROCESS_NAME] --providers="Microsoft-Diagnostics-DiagnosticSource:::FilterAndPayloadSpecs=[AS]Merq,System.Diagnostics.Metrics:::Metrics=Merq"
通过《dotnet-counters》监控指标
dotnet counters monitor --process-id [PROCESS_ID] --counters Merq
包含示例控制台应用程序的渲染示例
鸭子类型支持
在Merq中,能够松耦合事件(及其消费者)和命令执行(从其命令处理器实现)是一个关键功能。为了将这种解耦进行到极致,Merq允许像TypeScript/JavaScript在VSCode中那样进行操作:你可以将事件/命令定义作为源复制/粘贴到你的程序集中,并以“鸭子类型”的方式对其进行常规操作(如观察事件和执行命令)。
只要类型的全名匹配,转换就会自动发生。由于在许多场景中不需要这种功能,并且有无数种方法来实现这种对象映射功能,因此《Merq.Core》包仅提供启用此功能的钩子,但不提供任何内置实现。换句话说,默认不会进行鸭子类型转换。
《Merq.AutoMapper》包提供了一个这样的实现,它基于出色的《AutoMapper》库。它可以按照以下方式与DI容器注册
builder.Services.AddMessageBus<AutoMapperMessageBus>();
// register all services, including handlers and producers
builder.Services.AddServices();
自食其力
我们还从分支和拉取请求中创建CI包,这样您就可以在生产出来后尽快自食其力(dogfood)构建。
CI源为https://pkg.kzu.dev/index.json
。
包的版本方案为
- PR构建:42.42.42-pr
[NUMBER]
- 分支构建:42.42.42-
[BRANCH]
.[COMMITS]
赞助商
有关命令和事件的用法和编写,请参阅《Merq》的readme。
赞助商
NuGet包
没有其他NuGet包使用此包。
GitHub仓库
没有其他流行的GitHub仓库使用此包。
版本 | 下载 | 最后更新 |
---|---|---|
2.0.0 | 211 | 1/29/2024 |
2.0.0-rc.6 | 172 | 1/29/2024 |
2.0.0-rc.5 | 49 | 1/27/2024 |
2.0.0-rc.3 | 468 | 7/10/2023 |
2.0.0-rc.2 | 83 | 7/10/2023 |
2.0.0-rc.1 | 75 | 7/7/2023 |
2.0.0-beta.4 | 69 | 7/6/2023 |
2.0.0-beta.3 | 94 | 11/19/2022 |
2.0.0-beta.2 | 93 | 11/18/2022 |
2.0.0-alpha | 161 | 11/16/2022 |