Merq.DependencyInjection 2.0.0

前缀已预订
dotnet add package Merq.DependencyInjection --version 2.0.0                
NuGet\Install-Package Merq.DependencyInjection -Version 2.0.0                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用了 NuGet 模块的 Install-Package 版本。
<PackageReference Include="Merq.DependencyInjection" Version="2.0.0" />                
对于支持 包引用 的项目,将此 XML 节点复制到项目文件中以便引用该包。
paket add Merq.DependencyInjection --version 2.0.0                
#r "nuget: Merq.DependencyInjection, 2.0.0"                
#r 指令可用于 F# Interactive 和 Polyglot Notebooks。将此复制到交互工具或脚本的源代码中以便引用包。
// 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

包含示例控制台应用程序的渲染示例

dotnet-counters screenshot

鸭子类型支持

在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 Version Build

我们还从分支和拉取请求中创建CI包,这样您就可以在生产出来后尽快自食其力(dogfood)构建。

CI源为https://pkg.kzu.dev/index.json

包的版本方案为

  • PR构建:42.42.42-pr[NUMBER]
  • 分支构建:42.42.42-[BRANCH].[COMMITS]

赞助商

Clarius Org Kirill Osenkov MFB Technologies, Inc. Stephen Shaw Torutek DRIVE.NET, Inc. Daniel Gnägi Ashley Medway Keith Pickford Thomas Bolon Kori Francis Toni Wenzel Giorgi Dalakishvili Mike James Dan Siegel Reuben Swartz Jacob Foshee alternate text is missing from this package README image Eric Johnson Norman Mackay Certify The Web Ix Technologies B.V. David JENNI Jonathan Oleg Kyrylchuk Charley Wu Jakob Tikjøb Andersen Seann Alexander Tino Hager Mark Seemann Angelo Belchior Ken Bonny Simon Cropp agileworks-eu alternate text is missing from this package README image Zheyu Shen Vezel

Sponsor this project  

更多关于GitHub Sponsors的信息

有关命令和事件的用法和编写,请参阅《Merq》的readme。

赞助商

Clarius Org Kirill Osenkov MFB Technologies, Inc. Stephen Shaw Torutek DRIVE.NET, Inc. Daniel Gnägi Ashley Medway Keith Pickford Thomas Bolon Kori Francis Toni Wenzel Giorgi Dalakishvili Mike James Dan Siegel Reuben Swartz Jacob Foshee alternate text is missing from this package README image Eric Johnson Norman Mackay Certify The Web Ix Technologies B.V. David JENNI Jonathan Oleg Kyrylchuk Charley Wu Jakob Tikjøb Andersen Seann Alexander Tino Hager Mark Seemann Angelo Belchior Ken Bonny Simon Cropp agileworks-eu alternate text is missing from this package README image Zheyu Shen Vezel

Sponsor this project  

更多关于GitHub Sponsors的信息

该包中没有支持的框架资源。

更多关于目标框架.NET Standard的信息。

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