Merq.DependencyInjection
2.0.0-rc.3
Prefix Reserved
See the version list below for details.
dotnet add package Merq.DependencyInjection --version 2.0.0-rc.3
NuGet\Install-Package Merq.DependencyInjection -Version 2.0.0-rc.3
<PackageReference Include="Merq.DependencyInjection" Version="2.0.0-rc.3" />
paket add Merq.DependencyInjection --version 2.0.0-rc.3
#r "nuget: Merq.DependencyInjection, 2.0.0-rc.3"
// Install Merq.DependencyInjection as a Cake Addin #addin nuget:?package=Merq.DependencyInjection&version=2.0.0-rc.3&prerelease // Install Merq.DependencyInjection as a Cake Tool #tool nuget:?package=Merq.DependencyInjection&version=2.0.0-rc.3&prerelease
var builder = WebApplication.CreateBuilder(args);
...
// Automatically add the message bus and all command handlers and
// event producers in the current project and any dependencies
// The enableAutoMapping parameter enables duck typing for events and commands
// across assemblies
builder.Services.AddMessageBus(enableAutoMapping: false);
The AddMessageBus
extension method leverages compile-time code generation to avoid
negatively impacting run-time app startup, via the dependency on
Devlooped.Extensions.DependencyInjection.Attributed.
This also ensures that all proper service interfaces are registered for the various
components.
Telemetry and Monitoring
The core implementation of the IMessageBus
is instrumented with ActivitySource
and
Metric
, providing out of the box support for Open Telemetry-based monitoring, as well
as via dotnet trace
and dotnet counters.
To export telemetry using Open Telemetry, for example:
using var tracer = Sdk
.CreateTracerProviderBuilder()
.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("ConsoleApp"))
.AddSource(source.Name)
.AddSource("Merq.Core")
.AddSource("Merq.AutoMapper")
.AddConsoleExporter()
.AddZipkinExporter()
.AddAzureMonitorTraceExporter(o => o.ConnectionString = config["AppInsights"])
.Build();
Collecting traces via dotnet-trace:
dotnet trace collect --name [PROCESS_NAME] --providers="Microsoft-Diagnostics-DiagnosticSource:::FilterAndPayloadSpecs=[AS]Merq,System.Diagnostics.Metrics:::Metrics=Merq"
Monitoring metrics via dotnet-counters:
dotnet counters monitor --process-id [PROCESS_ID] --counters Merq
Duck Typing Support
Being able to loosely couple both events (and their consumers) and command execution (from their
command handler implementations) is a key feature of Merq. To take this decoupling to the extreme,
Merq allows a similar capability as allowed by the TypeScript/JavaScript in VSCode: you can just
copy/paste an event/command definition as source into your assembly, and perform the regular
operations with it (like Observe
an event and Execute
a command), in a "duck typing" manner.
As long as the types' full name match, the conversion will happen automatically. Since this
functionality isn't required in many scenarios, and since there are a myriad ways to implement
such an object mapping functionality, the Merq.Core
package only provides the hooks to enable
this, but does not provide any built-in implementation for it.
The Merq.AutoMapper package provides one such implementation, based on the excelent AutoMapper library.
Dogfooding
We also produce CI packages from branches and pull requests so you can dogfood builds as quickly as they are produced.
The CI feed is https://pkg.kzu.io/index.json
.
The versioning scheme for packages is:
- PR builds: 42.42.42-pr
[NUMBER]
- Branch builds: 42.42.42-
[BRANCH]
.[COMMITS]
Sponsors
Learn more about GitHub Sponsors
For usage and authoring of commands and events, see Merq readme.
Sponsors
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.0
- Devlooped.Extensions.DependencyInjection.Attributed (>= 1.3.2)
- Merq (>= 2.0.0-rc.3)
- Merq.AutoMapper (>= 2.0.0-rc.3)
- Merq.Core (>= 2.0.0-rc.3)
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 |
---|---|---|
2.0.0 | 279 | 1/29/2024 |
2.0.0-rc.6 | 316 | 1/29/2024 |
2.0.0-rc.5 | 57 | 1/27/2024 |
2.0.0-rc.3 | 484 | 7/10/2023 |
2.0.0-rc.2 | 99 | 7/10/2023 |
2.0.0-rc.1 | 93 | 7/7/2023 |
2.0.0-beta.4 | 84 | 7/6/2023 |
2.0.0-beta.3 | 111 | 11/19/2022 |
2.0.0-beta.2 | 108 | 11/18/2022 |
2.0.0-alpha | 203 | 11/16/2022 |