-
Notifications
You must be signed in to change notification settings - Fork 5
V4.3.0/di additions #38
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
Note Other AI code review bot(s) detectedCodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review. Warning Rate limit exceeded@gimlichael has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 24 minutes and 49 seconds before requesting another review. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. 📒 Files selected for processing (7)
WalkthroughAdds two new DI extension libraries for JSON marshalling (Text.Json and Newtonsoft.Json) with tests; updates solution and project references; adds upfront null-guards to many IServiceCollection extension methods; changes AddConfiguredOptions to also register the configurator and options as singletons; updates docs/release notes and bumps two AWS SDK pins. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
participant Dev as Developer
participant SVC as IServiceCollection
participant Ext as ServiceCollectionExtensions
participant DI as DI Container
Dev->>SVC: AddJsonMarshaller(jsonSetup?, serviceSetup?)
SVC->>Ext: call extension
Ext->>SVC: Validator.ThrowIfNull(services)
Ext->>SVC: AddMarshaller<JsonMarshaller>(serviceSetup)
Ext->>SVC: AddConfiguredOptions(JsonFormatterOptions, jsonSetup or default)
note right of SVC: AddConfiguredOptions now also registers:<br/>- Action<JsonFormatterOptions> singleton<br/>- JsonFormatterOptions instance singleton
SVC->>DI: register marshaller & options & configurator singletons
DI-->>Dev: services ready (fluent IServiceCollection)
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related PRs
Poem
✨ Finishing Touches🧪 Generate unit tests
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. CodeRabbit Commands (Invoked using PR/Issue comments)Type Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This pull request introduces version 4.3.0 across the Savvyio codebase, focusing on dependency upgrades and the addition of two new JSON marshaller extension packages for Microsoft Dependency Injection.
- Upgraded AWS package dependencies to latest compatible versions
- Added new
Savvyio.Extensions.DependencyInjection.Text.Jsonpackage for Microsoft's built-in JSON - Added new
Savvyio.Extensions.DependencyInjection.Newtonsoft.Jsonpackage for Newtonsoft JSON - Updated README files and package documentation to include new extension packages
- Enhanced XML documentation coverage and validation across dependency injection extension methods
Reviewed Changes
Copilot reviewed 101 out of 103 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| Directory.Packages.props | Updated AWS SDK package versions to latest compatible releases |
| CHANGELOG.md | Added version 4.3.0 release notes documenting new JSON extensions |
| Various README.md files | Updated package lists to include new JSON extension packages |
| src/Savvyio.Extensions.DependencyInjection.*.Json/ | New projects providing DI extensions for JSON marshallers |
| test/Savvyio.Extensions.*.Tests/ | Added comprehensive unit test coverage for new components |
| .github/copilot-instructions.md | Added development guidelines for unit testing and XML documentation |
| .docfx/docfx.json | Updated documentation configuration to include new packages |
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
.nuget/Savvyio.Extensions.DependencyInjection.Text.Json/README.md
Outdated
Show resolved
Hide resolved
.nuget/Savvyio.Extensions.DependencyInjection.Newtonsoft.Json/README.md
Outdated
Show resolved
Hide resolved
...nsions.DependencyInjection.Text.Json/Savvyio.Extensions.DependencyInjection.Text.Json.csproj
Outdated
Show resolved
Hide resolved
...dencyInjection.Newtonsoft.Json/Savvyio.Extensions.DependencyInjection.Newtonsoft.Json.csproj
Outdated
Show resolved
Hide resolved
|
|
||
|
|
Copilot
AI
Aug 29, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There are unnecessary extra blank lines between methods. A single blank line is sufficient for separation.
| Assert.Throws<ArgumentNullException>(() => new NatsCommandQueue(_marshaller, null)); | ||
| } | ||
|
|
||
|
|
Copilot
AI
Aug 29, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There are unnecessary extra blank lines between methods. A single blank line is sufficient for separation.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 11
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (4)
.docfx/docfx.json (1)
70-71: Duplicate "xrefService" keys under build; remove one to avoid ambiguous config.JSON with duplicate keys is undefined; DocFX will effectively ignore one. Keep a single "xrefService" entry.
Apply this diff to remove the trailing duplicate:
"disableGitFeatures": false, - "xrefService": [ - "https://xref.docs.microsoft.com/query?uid={uid}" ] + "xrefService": [ + "https://xref.docs.microsoft.com/query?uid={uid}" ] }Also applies to: 132-134
.nuget/Savvyio.Extensions.DependencyInjection.DapperExtensions/PackageReleaseNotes.txt (1)
75-77: Fix namespace and grammar in New Features bulletThe namespace should be Savvyio.Extensions.DependencyInjection.DapperExtensions (not .Dapper), and “consist” → “consists”.
-- ADDED ServiceCollectionExtensions class in the Savvyio.Extensions.DependencyInjection.Dapper namespace that consist of extension methods for the IServiceCollection interface: AddDapperExtensionsDataStore +- ADDED ServiceCollectionExtensions class in the Savvyio.Extensions.DependencyInjection.DapperExtensions namespace that consists of extension methods for the IServiceCollection interface: AddDapperExtensionsDataStoresrc/Savvyio.Extensions.DependencyInjection.EFCore.Domain.EventSourcing/ServiceCollectionExtensions.cs (1)
18-27: Fix XML doc: refers to EfCoreAggregateRepository instead of EfCoreTracedAggregateRepositorySummary/remarks/seealso reference the non-traced type, which is misleading for these traced overloads. Adjust the XML to the traced variants.
-/// Adds an <see cref="EfCoreAggregateRepository{TEntity,TKey}"/> to the specified <see cref="IServiceCollection" />. +/// Adds an <see cref="EfCoreTracedAggregateRepository{TEntity,TKey}"/> to the specified <see cref="IServiceCollection" />. ... -/// <remarks>The <see cref="EfCoreAggregateRepository{TEntity,TKey,TMarker}"/> will be type forwarded accordingly.</remarks> +/// <remarks>The <see cref="EfCoreTracedAggregateRepository{TEntity,TKey}"/> will be type forwarded accordingly.</remarks> ... -/// Adds an <see cref="EfCoreAggregateRepository{TEntity,TKey,TMarker}"/> to the specified <see cref="IServiceCollection" />. +/// Adds an <see cref="EfCoreTracedAggregateRepository{TEntity,TKey,TMarker}"/> to the specified <see cref="IServiceCollection" />. ... -/// <seealso cref="EfCoreAggregateRepository{TEntity,TKey,TMarker}"/> +/// <seealso cref="EfCoreTracedAggregateRepository{TEntity,TKey,TMarker}"/> -/// <remarks>The <see cref="EfCoreAggregateRepository{TEntity,TKey,TMarker}"/> will be type forwarded accordingly.</remarks> +/// <remarks>The <see cref="EfCoreTracedAggregateRepository{TEntity,TKey,TMarker}"/> will be type forwarded accordingly.</remarks>Also applies to: 36-46
src/Savvyio.Extensions.DependencyInjection/ServiceCollectionExtensions.cs (1)
36-42: Avoid divergence between TOptions singleton and IOptions.Value
Registering a pre-builtTOptionsinstance and the setup delegate as separate singletons can drift from the aggregated options pipeline (additional Configure calls, binders, PostConfigure) and yields duplicateTOptionsandAction<TOptions>registrations whenAddConfiguredOptions<T>is called multiple times—making single‐service resolution order‐dependent.Use
IOptions<TOptions>.Valueto resolveTOptionsand avoid duplicate singletons:- return services - .Configure(setup) // support for IOptions<TOptions> - .AddSingleton(setup) // support for Action<TOptions> - .AddSingleton(options); // support for TOptions + return services + .Configure(setup) // support for IOptions<TOptions> + .AddSingleton<Action<TOptions>>(setup) // expose configurator if needed + .AddSingleton<TOptions>(sp => sp.GetRequiredService<Microsoft.Extensions.Options.IOptions<TOptions>>().Value);Verification checklist:
- Injected
TOptionsequalsIOptions<TOptions>.Valueunder multipleConfigure<TOptions>calls.Action<TOptions>resolution remains deterministic (or consumeIEnumerable<Action<TOptions>>if multiple configurators are registered).
🧹 Nitpick comments (76)
.nuget/Savvyio.Messaging/PackageReleaseNotes.txt (3)
1-2: Include a release date (and optional compare link) for traceability.Add an explicit release date (e.g., “Released: 2025-08-29”) and, if feasible, a compare link to the tag to help consumers correlate changes.
Example:
Version: 4.3.0 Availability: .NET 9 and .NET 8 +Released: 2025-08-29
5-5: Call out notable dependency upgrades instead of a generic statement.Listing the key bumped packages (top 3–5) improves the usefulness of the notes. If none apply to Savvyio.Messaging specifically, consider stating “No API changes; internal dependency updates only.”
Example structure:
- - CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs) + - CHANGED Dependencies upgraded to latest compatible versions for all supported TFMs: + - <PackageA> <old> → <new> + - <PackageB> <old> → <new> + - <PackageC> <old> → <new>
3-3: Replace non-breaking space with a normal blank line.The current line appears to be a non-breaking space, which can render oddly in some NuGet views.
- +.nuget/Savvyio.Extensions.RabbitMQ/PackageReleaseNotes.txt (3)
3-3: Replace the non-breaking space with a normal blank line.Line 3 appears to contain U+00A0 (NBSP). This can cause odd diffs/rendering across editors.
- +
5-5: Call out notable upgraded dependencies and breaking-change status.The generic “Dependencies upgraded” note is fine, but listing key packages (e.g., RabbitMQ.Client, Microsoft.Extensions.*) and stating “No breaking changes” improves clarity for consumers.
Example:
# ALM -- CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs) +- CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs) + - RabbitMQ.Client: x.y.z → a.b.c + - Microsoft.Extensions.Options: x.y.z → a.b.c + - … +# Compatibility +- No breaking changes in this release.
1-2: Optionally include a release date for traceability.If other packages add dates, consider adding one here for consistency.
Example:
Version: 4.3.0 +Released: 2025-08-29 Availability: .NET 9 and .NET 8.nuget/Savvyio.Extensions.DependencyInjection.RabbitMQ/PackageReleaseNotes.txt (3)
3-3: Replace non-breaking spaces on “blank” linesLines contain NBSP (U+00A0) instead of true blank lines, which causes noisy diffs/rendering in some viewers.
Apply:
- + - +Also applies to: 6-6
4-6: Clarify change scope and call out lack of breaking changes (if true)If 4.3.0 only bumps dependencies, say so explicitly and note “No API or behavior changes” to set expectations. Optionally enumerate key upgraded dependencies.
Proposed tweak:
# ALM -- CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs) +- CHANGED Dependencies upgraded to the latest compatible versions across all supported TFMs. +- NOTE No breaking API or runtime behavior changes. <!-- if accurate --> + - (Optional) Highlights: <dep> x.y.z → a.b.c, <dep> …
4-4: Consider expanding the ALM acronym onceIf these notes target external consumers, consider “Application Lifecycle Management (ALM)” once for clarity. Keep the short form thereafter.
-# ALM +# Application Lifecycle Management (ALM).nuget/Savvyio.Extensions.DapperExtensions/PackageReleaseNotes.txt (2)
4-5: Consider calling out notable dependency bumps.Optional: add one or two bullets naming key packages and new versions (e.g., Dapper, SavvyIO core) to improve traceability for consumers scanning release notes.
3-6: Replace non‑breaking space “blank” lines with real blank lines.Lines appear to contain NBSP characters, which cause noisy diffs and inconsistent rendering in some viewers. Prefer empty lines.
- + - +Directory.Packages.props (1)
7-8: Add AWSSDK.Core to Directory.Packages.props
SQS and SNS are already centrally pinned and no AWSSDK packages are version-pinned in individual csproj files; including AWSSDK.Core in the central Directory.Packages.props will prevent future version drift..nuget/Savvyio.Domain.EventSourcing/PackageReleaseNotes.txt (1)
1-6: Consider adding release date and a link to the diff/changelog for 4.3.0.Including a release date (UTC) and a link to the repo CHANGELOG or GitHub compare view improves traceability across packages.
.nuget/Savvyio.EventDriven/PackageReleaseNotes.txt (1)
1-6: Mirror release-note metadata (date + changelog link) across packages.Same suggestion as other packages: add a release date and a reference link for 4.3.0 to keep notes consistent.
.nuget/Savvyio.Extensions.EFCore.Domain.EventSourcing/PackageReleaseNotes.txt (1)
1-6: Add release date and cross-reference to CHANGELOG.Minor consistency improvement to align with multi-package release notes.
src/Savvyio.Extensions.DependencyInjection.Domain/ServiceCollectionExtensions.cs (1)
15-24: Document default lifetime behavior.Consider noting that Scoped is the default lifetime when setup is null to make the API docs self-contained.
Apply:
/// <returns>A reference to <paramref name="services" /> so that additional configuration calls can be chained.</returns> -/// <remarks>If the underlying type of <typeparamref name="TService"/> implements <see cref="IDependencyInjectionMarker{TMarker}"/> interface then this is automatically handled. Also, the implementation will be type forwarded accordingly.</remarks> +/// <remarks> +/// If the underlying type of <typeparamref name="TService"/> implements <see cref="IDependencyInjectionMarker{TMarker}"/> this is automatically handled and the implementation is type-forwarded accordingly. +/// When <paramref name="setup"/> is null, the default <see cref="ServiceLifetime"/> is <see cref="ServiceLifetime.Scoped"/>. +/// </remarks>.nuget/Savvyio.EventDriven.Messaging/PackageReleaseNotes.txt (1)
3-3: Replace non-breaking space with a true blank line.The whitespace line uses U+00A0; prefer a normal empty line to avoid diff noise/render quirks.
Apply:
- +.nuget/Savvyio.Extensions.SimpleQueueService/PackageReleaseNotes.txt (1)
3-3: Normalize blank line whitespace.Line contains U+00A0; replace with an actual empty line.
- +.nuget/Savvyio.Extensions.QueueStorage/PackageReleaseNotes.txt (1)
1-6: Release notes entry reads well; add minor formatting fixes.
- Replace the non-breaking space lines with real blank lines to avoid hidden Unicode in diffs.
- Keep a trailing newline at EOF for tooling friendliness.
Version: 4.3.0 Availability: .NET 9 and .NET 8 - + # ALM - CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs) - +.nuget/Savvyio.Extensions.Text.Json/PackageReleaseNotes.txt (1)
1-6: Good 4.3.0 block; unify whitespace and ensure newline at EOF.
- Swap NBSP-only lines for actual blank lines.
- File appears to miss a trailing newline—add one.
Version: 4.3.0 Availability: .NET 9 and .NET 8 - + # ALM - CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs) - +.nuget/Savvyio.Domain/PackageReleaseNotes.txt (1)
1-6: Consistent 4.3.0 header; minor whitespace nit.Replace NBSP-only lines with true blank lines; keep trailing newline.
Version: 4.3.0 Availability: .NET 9 and .NET 8 - + # ALM - CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs) - +.nuget/Savvyio.Extensions.DependencyInjection.QueueStorage/PackageReleaseNotes.txt (1)
1-6: 4.3.0 block looks good; apply whitespace cleanup.Avoid NBSP lines; ensure final newline.
Version: 4.3.0 Availability: .NET 9 and .NET 8 - + # ALM - CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs) - +.nuget/Savvyio.Extensions.SimpleQueueService/README.md (1)
33-33: New DI JSON package links — LGTMBoth additions fit the existing style and positioning among DI packages. LanguageTool’s warnings here look like false positives for list formatting; safe to ignore.
Also applies to: 37-37
.nuget/Savvyio.Extensions.EFCore/PackageReleaseNotes.txt (1)
1-6: Optional: Add release date to the 4.3.0 release notes blockVersion and Availability lines are correctly present; consider adding a
Date: YYYY-MM-DDentry to the 4.3.0 section in PackageReleaseNotes.txt for traceability..nuget/Savvyio.Commands/PackageReleaseNotes.txt (1)
1-6: Release note entry LGTM; verify TFMs and dep bumps; avoid NBSP whitespace lines.
- Content/format matches prior entries. Please confirm the csproj TFMs truly are .NET 9/.NET 8 and that all dependency bumps landed for 4.3.0.
- Optional: add the release date for 4.3.0 for traceability.
- Minor nit: the blank lines appear to be non-breaking spaces (U+00A0). Prefer plain empty lines to avoid rendering quirks in some viewers.
.nuget/Savvyio.Extensions.Dispatchers/PackageReleaseNotes.txt (2)
1-6: 4.3.0 entry looks consistent; minor whitespace nitLGTM on content. Replace the NBSP-only spacer lines with true blank lines to avoid invisible-diff noise across editors/OS.
Apply for the lines rendered as a single NBSP:
- +
1-6: Optional: add release date for traceabilityIf repo conventions allow, add a date under the version header (e.g., “Released: 2025-08-29”).
.nuget/Savvyio.Core/PackageReleaseNotes.txt (2)
1-6: Content LGTM; normalize spacer linesSame NBSP-only line issue as other release notes. Swap NBSP with real blank lines for cleaner diffs.
- +
1-6: Optional: version datingConsider adding a release date for 4.3.0 if that’s standardizing across packages.
.nuget/Savvyio.Extensions.DependencyInjection.Dapper/PackageReleaseNotes.txt (1)
1-6: 4.3.0 block approved; whitespace polishEntry mirrors other packages. Replace NBSP spacer lines with empty lines to avoid encoding surprises.
- +.nuget/Savvyio.Extensions.DependencyInjection.SimpleQueueService/README.md (1)
37-37: Addition of Text.Json DI package: looks goodConsistent naming and emoji pattern; LanguageTool warnings here seem spurious.
If desired, ensure the DI package bullets remain strictly alphabetical within the DI group across all README files.
.nuget/Savvyio.Commands.Messaging/PackageReleaseNotes.txt (2)
1-6: 4.3.0 release notes: OK; unify spacingContent matches other packages. Replace NBSP-only spacer lines with blank lines for consistency.
- +
10-12: Minor formatting consistencyThe “# ALM” header spacing differs slightly from adjacent sections. Align spacing/padding to avoid churn in future diffs.
.nuget/Savvyio.Extensions.DependencyInjection.EFCore.Domain.EventSourcing/PackageReleaseNotes.txt (1)
1-6: Normalize whitespace and optionally add a release date for traceabilityThere are NBSP lines; replace with regular blank lines. Optionally add a release date line under Availability.
Version: 4.3.0 Availability: .NET 9 and .NET 8 - + +# ALM - CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs) - + +Release date: 2025-08-29.nuget/Savvyio.Extensions.RabbitMQ/README.md (1)
33-37: New DI JSON package links look correct; keep ordering consistent across READMEsThe additions are fine. For consistency, ensure the placement/order of the two DI JSON entries matches other package READMEs. If you aim for grouping, consider clustering JSON-related DI packages together.
.nuget/Savvyio.Extensions.NATS/PackageReleaseNotes.txt (1)
1-6: Same whitespace nit as other release notes; optional release dateReplace NBSP with plain blank lines; consider adding a release date line.
Version: 4.3.0 Availability: .NET 9 and .NET 8 - + # ALM - CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs) - + +Release date: 2025-08-29.nuget/Savvyio.Extensions.EFCore.Domain.EventSourcing/README.md (1)
33-37: Links added—consider consistency across reposEntries are good. Please ensure the same insertion points/order for the DI JSON packages across all README “Related Packages” lists for uniform discoverability.
.nuget/Savvyio.Extensions.DependencyInjection.Dapper/README.md (1)
33-37: Mirror ordering with other READMEsThe two DI JSON links are correct. For polish, align their ordering/position with the other README lists in this PR.
.nuget/Savvyio.Extensions.Newtonsoft.Json/README.md (1)
3-3: Name the library “Newtonsoft.Json” consistently.Minor wording improvement for searchability/consistency.
-Extend the Savvy I/O core assemblies with support for Newtonsoft JSON. +Extend the Savvy I/O core assemblies with support for Newtonsoft.Json..nuget/Savvyio.Extensions.DependencyInjection.EFCore/PackageReleaseNotes.txt (1)
1-6: 4.3.0 block reads well and matches repo-wide ALM phrasing.No issues. Consider adding specific dependency highlights in future if notable.
src/Savvyio.Extensions.DependencyInjection.Text.Json/Savvyio.Extensions.DependencyInjection.Text.Json.csproj (1)
4-4: Clarify description to explicitly mention System.Text.Json.Tiny polish to be precise about the built-in JSON stack.
- <Description>Extend the Savvy I/O support for Microsoft Dependency Injection with support for official built-in JSON implementations.</Description> + <Description>Extend Savvy I/O for Microsoft Dependency Injection with support for System.Text.Json.</Description>.nuget/Savvyio.App/PackageReleaseNotes.txt (1)
1-34: List new DI JSON extensions in 4.3.0 referencesSavvyio.App now references the Text.Json DI extension; add both DI JSON extensions here for parity and discoverability.
- Savvyio.Extensions.DependencyInjection.SimpleQueueService +- Savvyio.Extensions.DependencyInjection.Newtonsoft.Json +- Savvyio.Extensions.DependencyInjection.Text.Json - Savvyio.Extensions.Dispatcherssrc/Savvyio.Extensions.DependencyInjection.QueueStorage/ServiceCollectionExtensions.cs (1)
32-38: Also guard setup delegates (azureQueueSetup/azureEventBusSetup)Prevent NREs earlier and surface clearer argument errors, mirroring the services guard.
public static IServiceCollection AddAzureCommandQueue(this IServiceCollection services, Action<AzureQueueOptions> azureQueueSetup, Action<ServiceOptions> serviceSetup = null) { - Validator.ThrowIfNull(services); + Validator.ThrowIfNull(services); + Validator.ThrowIfNull(azureQueueSetup); return servicespublic static IServiceCollection AddAzureCommandQueue<TMarker>(this IServiceCollection services, Action<AzureQueueOptions<TMarker>> azureQueueSetup, Action<ServiceOptions> serviceSetup = null) { - Validator.ThrowIfNull(services); + Validator.ThrowIfNull(services); + Validator.ThrowIfNull(azureQueueSetup); return servicespublic static IServiceCollection AddAzureEventBus(this IServiceCollection services, Action<AzureQueueOptions> azureQueueSetup, Action<AzureEventBusOptions> azureEventBusSetup, Action<ServiceOptions> serviceSetup = null) { - Validator.ThrowIfNull(services); + Validator.ThrowIfNull(services); + Validator.ThrowIfNull(azureQueueSetup); + Validator.ThrowIfNull(azureEventBusSetup); return servicespublic static IServiceCollection AddAzureEventBus<TMarker>(this IServiceCollection services, Action<AzureQueueOptions<TMarker>> azureQueueSetup, Action<AzureEventBusOptions<TMarker>> azureEventBusSetup, Action<ServiceOptions> serviceSetup = null) { - Validator.ThrowIfNull(services); + Validator.ThrowIfNull(services); + Validator.ThrowIfNull(azureQueueSetup); + Validator.ThrowIfNull(azureEventBusSetup); return servicesAlso applies to: 51-57, 71-78, 92-99
src/Savvyio.Extensions.DependencyInjection.Dapper/ServiceCollectionExtensions.cs (1)
26-32: Optional: validate dataSourceSetup callbacks tooAdd guards for dataSourceSetup to fail fast on bad inputs, consistent with services guard.
public static IServiceCollection AddDapperDataSource(this IServiceCollection services, Action<DapperDataSourceOptions> dataSourceSetup, Action<ServiceOptions> serviceSetup = null) { - Validator.ThrowIfNull(services); + Validator.ThrowIfNull(services); + Validator.ThrowIfNull(dataSourceSetup); return servicespublic static IServiceCollection AddDapperDataSource<TMarker>(this IServiceCollection services, Action<DapperDataSourceOptions<TMarker>> dataSourceSetup, Action<ServiceOptions> serviceSetup = null) { - Validator.ThrowIfNull(services); + Validator.ThrowIfNull(services); + Validator.ThrowIfNull(dataSourceSetup); return servicesAlso applies to: 45-51
src/Savvyio.Extensions.DependencyInjection.DapperExtensions/ServiceCollectionExtensions.cs (1)
23-27: Consider offering overloads that accept ServiceOptions to control lifetimeOther stores (e.g., EFCore) expose an overload taking Action. Providing it here would allow callers to configure lifetimes consistently.
@@ -using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection; +using Cuemon.Extensions.DependencyInjection; @@ public static class ServiceCollectionExtensions { @@ public static IServiceCollection AddDapperExtensionsDataStore<T>(this IServiceCollection services) where T : class { Validator.ThrowIfNull(services); return services.AddDataStore<DapperExtensionsDataStore<T>, T, DapperExtensionsQueryOptions<T>>(); } + + /// <summary> + /// Adds an implementation of <see cref="DapperExtensionsDataStore{T}"/> with configurable <see cref="ServiceOptions"/>. + /// </summary> + public static IServiceCollection AddDapperExtensionsDataStore<T>(this IServiceCollection services, Action<ServiceOptions> setup) where T : class + { + Validator.ThrowIfNull(services); + return services.AddDataStore<DapperExtensionsDataStore<T>, T, DapperExtensionsQueryOptions<T>>(setup); + } @@ public static IServiceCollection AddDapperExtensionsDataStore<T, TMarker>(this IServiceCollection services) where T : class { Validator.ThrowIfNull(services); return services.AddDataStore<DapperExtensionsDataStore<T, TMarker>, T, DapperExtensionsQueryOptions<T>>(); } + + /// <summary> + /// Adds an implementation of <see cref="DapperExtensionsDataStore{T,TMarker}"/> with configurable <see cref="ServiceOptions"/>. + /// </summary> + public static IServiceCollection AddDapperExtensionsDataStore<T, TMarker>(this IServiceCollection services, Action<ServiceOptions> setup) where T : class + { + Validator.ThrowIfNull(services); + return services.AddDataStore<DapperExtensionsDataStore<T, TMarker>, T, DapperExtensionsQueryOptions<T>>(setup); + }Also applies to: 39-43
.nuget/Savvyio.Extensions.EFCore.Domain/PackageReleaseNotes.txt (1)
1-6: Release block OK; minor whitespace cleanupLooks good. Replace the non-breaking space lines (U+00A0) with regular blank lines to avoid rendering quirks in some viewers.
Version: 4.3.0 Availability: .NET 9 and .NET 8 - + # ALM - CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs) - +.nuget/Savvyio.Extensions.DependencyInjection.DapperExtensions/PackageReleaseNotes.txt (1)
1-6: Release block OK; minor whitespace cleanupSame NBSP issue as other release files; swap for plain blank lines.
Version: 4.3.0 Availability: .NET 9 and .NET 8 - + # ALM - CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs) - +src/Savvyio.Extensions.DependencyInjection.SimpleQueueService/ServiceCollectionExtensions.cs (1)
31-37: Optionally guard awsSetup for clearer failure modeIf AddConfiguredOptions does not accept null, add explicit validation to surface a precise error.
public static IServiceCollection AddAmazonCommandQueue(this IServiceCollection services, Action<AmazonCommandQueueOptions> awsSetup, Action<ServiceOptions> serviceSetup = null) { Validator.ThrowIfNull(services); + Validator.ThrowIfNull(awsSetup); return services .AddMessageQueue<AmazonCommandQueue, ICommand>(serviceSetup ?? (o => o.Lifetime = ServiceLifetime.Singleton)) .AddConfiguredOptions(awsSetup); } @@ public static IServiceCollection AddAmazonCommandQueue<TMarker>(this IServiceCollection services, Action<AmazonCommandQueueOptions<TMarker>> awsSetup, Action<ServiceOptions> serviceSetup = null) { Validator.ThrowIfNull(services); + Validator.ThrowIfNull(awsSetup); return services .AddMessageQueue<AmazonCommandQueue<TMarker>, ICommand>(serviceSetup ?? (o => o.Lifetime = ServiceLifetime.Singleton)) .AddConfiguredOptions(awsSetup); } @@ public static IServiceCollection AddAmazonEventBus(this IServiceCollection services, Action<AmazonEventBusOptions> awsSetup, Action<ServiceOptions> serviceSetup = null) { Validator.ThrowIfNull(services); + Validator.ThrowIfNull(awsSetup); return services .AddMessageBus<AmazonEventBus, IIntegrationEvent>(serviceSetup ?? (o => o.Lifetime = ServiceLifetime.Singleton)) .AddConfiguredOptions(awsSetup); } @@ public static IServiceCollection AddAmazonEventBus<TMarker>(this IServiceCollection services, Action<AmazonEventBusOptions<TMarker>> awsSetup, Action<ServiceOptions> serviceSetup = null) { Validator.ThrowIfNull(services); + Validator.ThrowIfNull(awsSetup); return services .AddMessageBus<AmazonEventBus<TMarker>, IIntegrationEvent>(serviceSetup ?? (o => o.Lifetime = ServiceLifetime.Singleton)) .AddConfiguredOptions(awsSetup); }Also applies to: 50-56, 69-75, 88-94
src/Savvyio.Extensions.DependencyInjection.RabbitMQ/ServiceCollectionExtensions.cs (1)
28-31: Optionally guard setup delegates too (clearer error when null)rabbitMqSetup is required; consider null-guarding it for earlier, clearer exceptions, and document it.
/// <exception cref="ArgumentNullException"> -/// <paramref name="services"/> cannot be null. +/// <paramref name="services"/> cannot be null. +/// <paramref name="rabbitMqSetup"/> cannot be null. /// </exception> public static IServiceCollection AddRabbitMqCommandQueue(this IServiceCollection services, Action<RabbitMqCommandQueueOptions> rabbitMqSetup, Action<ServiceOptions> serviceSetup = null) { Validator.ThrowIfNull(services); + Validator.ThrowIfNull(rabbitMqSetup); return services .AddMessageQueue<RabbitMqCommandQueue, ICommand>(serviceSetup ?? (o => o.Lifetime = ServiceLifetime.Singleton)) .AddConfiguredOptions(rabbitMqSetup); } @@ /// <exception cref="ArgumentNullException"> -/// <paramref name="services"/> cannot be null. +/// <paramref name="services"/> cannot be null. +/// <paramref name="rabbitMqSetup"/> cannot be null. /// </exception> public static IServiceCollection AddRabbitMqCommandQueue<TMarker>(this IServiceCollection services, Action<RabbitMqCommandQueueOptions<TMarker>> rabbitMqSetup, Action<ServiceOptions> serviceSetup = null) { Validator.ThrowIfNull(services); + Validator.ThrowIfNull(rabbitMqSetup); return services .AddMessageQueue<RabbitMqCommandQueue<TMarker>, ICommand>(serviceSetup ?? (o => o.Lifetime = ServiceLifetime.Singleton)) .AddConfiguredOptions(rabbitMqSetup); } @@ /// <exception cref="ArgumentNullException"> -/// <paramref name="services"/> cannot be null. +/// <paramref name="services"/> cannot be null. +/// <paramref name="rabbitMqSetup"/> cannot be null. /// </exception> public static IServiceCollection AddRabbitMqEventBus(this IServiceCollection services, Action<RabbitMqEventBusOptions> rabbitMqSetup, Action<ServiceOptions> serviceSetup = null) { Validator.ThrowIfNull(services); + Validator.ThrowIfNull(rabbitMqSetup); return services .AddMessageBus<RabbitMqEventBus, IIntegrationEvent>(serviceSetup ?? (o => o.Lifetime = ServiceLifetime.Singleton)) .AddConfiguredOptions(rabbitMqSetup); } @@ /// <exception cref="ArgumentNullException"> -/// <paramref name="services"/> cannot be null. +/// <paramref name="services"/> cannot be null. +/// <paramref name="rabbitMqSetup"/> cannot be null. /// </exception> public static IServiceCollection AddRabbitMqEventBus<TMarker>(this IServiceCollection services, Action<RabbitMqEventBusOptions<TMarker>> rabbitMqSetup, Action<ServiceOptions> serviceSetup = null) { Validator.ThrowIfNull(services); + Validator.ThrowIfNull(rabbitMqSetup); return services .AddMessageBus<RabbitMqEventBus<TMarker>, IIntegrationEvent>(serviceSetup ?? (o => o.Lifetime = ServiceLifetime.Singleton)) .AddConfiguredOptions(rabbitMqSetup); }Also applies to: 33-37, 47-50, 52-56, 66-69, 71-75, 85-88, 90-94
src/Savvyio.Extensions.DependencyInjection.EFCore/ServiceCollectionExtensions.cs (1)
25-27: Optionally validate required dataSourceSetupBoth AddEfCoreDataSource overloads require dataSourceSetup; guard it and document to surface errors early (rather than deferring to AddConfiguredOptions).
/// <exception cref="ArgumentNullException"> -/// <paramref name="services"/> cannot be null. +/// <paramref name="services"/> cannot be null. +/// <paramref name="dataSourceSetup"/> cannot be null. /// </exception> public static IServiceCollection AddEfCoreDataSource(this IServiceCollection services, Action<EfCoreDataSourceOptions> dataSourceSetup, Action<ServiceOptions> serviceSetup = null) { Validator.ThrowIfNull(services); + Validator.ThrowIfNull(dataSourceSetup); return services.AddDataSource<EfCoreDataSource>(serviceSetup) .AddUnitOfWork<EfCoreDataSource>(serviceSetup) .AddConfiguredOptions(dataSourceSetup); } @@ /// <exception cref="ArgumentNullException"> -/// <paramref name="services"/> cannot be null. +/// <paramref name="services"/> cannot be null. +/// <paramref name="dataSourceSetup"/> cannot be null. /// </exception> public static IServiceCollection AddEfCoreDataSource<TMarker>(this IServiceCollection services, Action<EfCoreDataSourceOptions<TMarker>> dataSourceSetup, Action<ServiceOptions> serviceSetup = null) { Validator.ThrowIfNull(services); + Validator.ThrowIfNull(dataSourceSetup); return services.AddDataSource<EfCoreDataSource<TMarker>>(serviceSetup) .AddUnitOfWork<EfCoreDataSource<TMarker>>(serviceSetup) .AddConfiguredOptions(dataSourceSetup); }Also applies to: 30-34, 45-47, 50-54
src/Savvyio.Extensions.DependencyInjection.NATS/ServiceCollectionExtensions.cs (1)
28-31: Optionally guard natsSetup for earlier failure and align XML docsMirror the services guard for natsSetup to avoid deferred null issues inside AddConfiguredOptions.
/// <exception cref="ArgumentNullException"> -/// <paramref name="services"/> cannot be null. +/// <paramref name="services"/> cannot be null. +/// <paramref name="natsSetup"/> cannot be null. /// </exception> public static IServiceCollection AddNatsCommandQueue(this IServiceCollection services, Action<NatsCommandQueueOptions> natsSetup, Action<ServiceOptions> serviceSetup = null) { Validator.ThrowIfNull(services); + Validator.ThrowIfNull(natsSetup); return services .AddMessageQueue<NatsCommandQueue, ICommand>(serviceSetup ?? (o => o.Lifetime = ServiceLifetime.Singleton)) .AddConfiguredOptions(natsSetup); } @@ /// <exception cref="ArgumentNullException"> -/// <paramref name="services"/> cannot be null. +/// <paramref name="services"/> cannot be null. +/// <paramref name="natsSetup"/> cannot be null. /// </exception> public static IServiceCollection AddNatsCommandQueue<TMarker>(this IServiceCollection services, Action<NatsCommandQueueOptions<TMarker>> natsSetup, Action<ServiceOptions> serviceSetup = null) { Validator.ThrowIfNull(services); + Validator.ThrowIfNull(natsSetup); return services .AddMessageQueue<NatsCommandQueue<TMarker>, ICommand>(serviceSetup ?? (o => o.Lifetime = ServiceLifetime.Singleton)) .AddConfiguredOptions(natsSetup); } @@ /// <exception cref="ArgumentNullException"> -/// <paramref name="services"/> cannot be null. +/// <paramref name="services"/> cannot be null. +/// <paramref name="natsSetup"/> cannot be null. /// </exception> public static IServiceCollection AddNatsEventBus(this IServiceCollection services, Action<NatsEventBusOptions> natsSetup, Action<ServiceOptions> serviceSetup = null) { Validator.ThrowIfNull(services); + Validator.ThrowIfNull(natsSetup); return services .AddMessageBus<NatsEventBus, IIntegrationEvent>(serviceSetup ?? (o => o.Lifetime = ServiceLifetime.Singleton)) .AddConfiguredOptions(natsSetup); } @@ /// <exception cref="ArgumentNullException"> -/// <paramref name="services"/> cannot be null. +/// <paramref name="services"/> cannot be null. +/// <paramref name="natsSetup"/> cannot be null. /// </exception> public static IServiceCollection AddNatsEventBus<TMarker>(this IServiceCollection services, Action<NatsEventBusOptions<TMarker>> natsSetup, Action<ServiceOptions> serviceSetup = null) { Validator.ThrowIfNull(services); + Validator.ThrowIfNull(natsSetup); return services .AddMessageBus<NatsEventBus<TMarker>, IIntegrationEvent>(serviceSetup ?? (o => o.Lifetime = ServiceLifetime.Singleton)) .AddConfiguredOptions(natsSetup); }Also applies to: 33-37, 47-50, 52-56, 66-69, 71-75, 85-88, 90-94
.github/copilot-instructions.md (3)
1-4: Confirm whether multiple YAML front-matter blocks are supportedThis file has two front-matter sections. If your tooling only reads the first, the second section’s applyTo may be ignored. Consider consolidating to one front matter and using headings for sections, or split into two files.
Example consolidation:
---- -description: 'Writing Unit Tests in Savvyio' -applyTo: '**/*.cs' ---- +--- +description: 'Copilot authoring guidelines for Savvyio' +applyTo: '**/*.cs' +--- @@ ---- -description: 'Writing XML documentation in Savvyio' -applyTo: '**/*.cs' ---- +# Writing XML documentation in SavvyioAlso applies to: 119-121
107-110: Grammar nit: “derived from this”Tighten phrasing for clarity.
-- Do not rely on external systems except for xUnit itself and Codebelt.Extensions.Xunit (and derived from this). +- Do not rely on external systems except for xUnit itself and Codebelt.Extensions.Xunit (and those derived from it).
119-119: markdownlint MD003 (heading style) hintA linter reports a setext-style heading around here. Ensure all headings use atx (“# …”) and that any horizontal rules are separated by blank lines so they aren’t parsed as setext underlines. Alternatively, replace thematic breaks with “***”.
src/Savvyio.Extensions.DependencyInjection.EFCore.Domain/ServiceCollectionExtensions.cs (1)
25-27: Document that dataSourceSetup must not be nullBoth overloads pass dataSourceSetup to AddConfiguredOptions, which throws if the configurator is null. Add corresponding XML for dataSourceSetup to reflect runtime behavior.
/// <returns>A reference to <paramref name="services" /> so that additional calls can be chained.</returns> /// <remarks>The <see cref="EfCoreAggregateDataSource"/> will be type forwarded accordingly.</remarks> /// <exception cref="ArgumentNullException"> -/// <paramref name="services"/> cannot be null. +/// <paramref name="services"/> cannot be null -or- +/// <paramref name="dataSourceSetup"/> cannot be null. /// </exception>Also applies to: 44-46
test/Savvyio.Extensions.NATS.Tests/EventDriven/NatsEventBusTest.cs (1)
15-17: Make test fields readonlyThese are set once and never reassigned; mark readonly to communicate intent and prevent accidental mutation.
- private IMarshaller _marshaller = JsonMarshaller.Default; - private NatsEventBusOptions _options = new (); + private readonly IMarshaller _marshaller = JsonMarshaller.Default; + private readonly NatsEventBusOptions _options = new();test/Savvyio.Extensions.NATS.Tests/NatsMessageOptionsTest.cs (2)
1-1: Remove leading indentation before using directive.Minor style nit: drop the leading spaces before
using System;.- using System; +using System;
29-39: Prefer parameterized test over sequential assertions.Use
[Theory]with[InlineData]to isolate failures and avoid mutating the same instance.-[Fact] -public void ValidateOptions_ShouldThrow_WhenSubjectIsNullOrWhitespace() -{ - var options = new NatsMessageOptions { Subject = null }; - Assert.Throws<InvalidOperationException>(() => options.ValidateOptions()); - - options.Subject = ""; - Assert.Throws<InvalidOperationException>(() => options.ValidateOptions()); - - options.Subject = " "; - Assert.Throws<InvalidOperationException>(() => options.ValidateOptions()); -} +[Theory] +[InlineData(null)] +[InlineData("")] +[InlineData(" ")] +public void ValidateOptions_ShouldThrow_WhenSubjectIsNullOrWhitespace(string subject) +{ + var options = new NatsMessageOptions { Subject = subject }; + Assert.Throws<InvalidOperationException>(() => options.ValidateOptions()); +}test/Savvyio.Extensions.DependencyInjection.Newtonsoft.Json.Tests/Savvyio.Extensions.DependencyInjection.Newtonsoft.Json.Tests.csproj (1)
1-11: Mark test project as non-packable.Avoid accidental packaging by setting
IsPackableto false (if not set in shared props).<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <RootNamespace>Savvyio.Extensions.DependencyInjection.Newtonsoft.Json</RootNamespace> + <IsPackable>false</IsPackable> </PropertyGroup> <ItemGroup> <ProjectReference Include="..\..\src\Savvyio.Extensions.DependencyInjection.Newtonsoft.Json\Savvyio.Extensions.DependencyInjection.Newtonsoft.Json.csproj" /> </ItemGroup> </Project>.nuget/Savvyio.Extensions.DependencyInjection.Text.Json/PackageReleaseNotes.txt (2)
5-5: Grammar: “consist” → “consists”.Subject is singular (“class”).
-- ADDED ServiceCollectionExtensions class in the Savvyio.Extensions.DependencyInjection.Text.Json namespace that consist of extension methods for the IServiceCollection interface: AddJsonMarshaller +- ADDED ServiceCollectionExtensions class in the Savvyio.Extensions.DependencyInjection.Text.Json namespace that consists of extension methods for the IServiceCollection interface: AddJsonMarshaller
3-3: Replace non‑breaking spaces with empty lines.Ensures clean rendering across viewers.
- + @@ - +Also applies to: 6-6
CHANGELOG.md (3)
17-22: Grammar: “consist” → “consists”.Minor but user-facing.
-- ServiceCollectionExtensions class in the Savvyio.Extensions.DependencyInjection.Newtonsoft.Json namespace that consist of extension methods for the IServiceCollection interface: AddNewtonsoftJsonMarshaller +- ServiceCollectionExtensions class in the Savvyio.Extensions.DependencyInjection.Newtonsoft.Json namespace that consists of extension methods for the IServiceCollection interface: AddNewtonsoftJsonMarshaller ... -- ServiceCollectionExtensions class in the Savvyio.Extensions.DependencyInjection.Text.Json namespace that consist of extension methods for the IServiceCollection interface: AddJsonMarshaller +- ServiceCollectionExtensions class in the Savvyio.Extensions.DependencyInjection.Text.Json namespace that consists of extension methods for the IServiceCollection interface: AddJsonMarshaller
470-477: Typo: “Savvio.EventDriven” → “Savvyio.EventDriven”.-#### Savvio.EventDriven +#### Savvyio.EventDriven
603-611: Polish repeated phrasing “was moved to the namespace to the namespace equivalent …”.Tighten these sentences for readability; repetition appears multiple times in this block.
-- IAggregateRepository interface in the Savvyio.Domain namespace was moved to the to the namespace equivalent in the Savvyio.Core assembly +- IAggregateRepository interface in the Savvyio.Domain namespace was moved to the equivalent namespace in the Savvyio.Core assemblytest/Savvyio.Extensions.DependencyInjection.Newtonsoft.Json.Tests/ServiceCollectionExtensionsTest.cs (3)
35-44: Use GetRequiredService and dispose provider; enable validation.Improves test failure signals and validates DI graph on build.
- var provider = services.BuildServiceProvider(); - var marshaller = provider.GetService<NewtonsoftJsonMarshaller>(); + using var provider = services.BuildServiceProvider(new ServiceProviderOptions + { + ValidateScopes = true, + ValidateOnBuild = true + }); + var marshaller = provider.GetRequiredService<NewtonsoftJsonMarshaller>();
61-66: Same here for options retrieval.- var provider = services.BuildServiceProvider(); - var options = provider.GetService<NewtonsoftJsonFormatterOptions>(); + using var provider = services.BuildServiceProvider(new ServiceProviderOptions + { + ValidateScopes = true, + ValidateOnBuild = true + }); + var options = provider.GetRequiredService<NewtonsoftJsonFormatterOptions>();
82-86: Assert descriptor via TryGet as alternative (optional).Current Assert.Single is fine; alternatively, asserting both ServiceType and ImplementationType can catch mis-registrations.
- var descriptor = Assert.Single(services, d => d.ServiceType == typeof(NewtonsoftJsonMarshaller)); + var descriptor = Assert.Single( + services, + d => d.ServiceType == typeof(NewtonsoftJsonMarshaller) && + (d.ImplementationType == typeof(NewtonsoftJsonMarshaller) || d.ImplementationInstance is NewtonsoftJsonMarshaller));.nuget/Savvyio.Extensions.DependencyInjection.Newtonsoft.Json/PackageReleaseNotes.txt (2)
5-5: Grammar: singularize and fix verb agreement in feature bulletUse “consists of an extension method” (singular) to match the single API listed.
-- ADDED ServiceCollectionExtensions class in the Savvyio.Extensions.DependencyInjection.Newtonsoft.Json namespace that consist of extension methods for the IServiceCollection interface: AddNewtonsoftJsonMarshaller +- ADDED ServiceCollectionExtensions class in the Savvyio.Extensions.DependencyInjection.Newtonsoft.Json namespace that consists of an extension method for the IServiceCollection interface: AddNewtonsoftJsonMarshaller
6-6: Add trailing newline (editorconfig/md conventions)File currently lacks a trailing newline; add one for POSIX/tooling friendliness.
.nuget/Savvyio.Extensions.DependencyInjection.Newtonsoft.Json/README.md (1)
3-3: Tighten wording to explicitly mention Newtonsoft.Json marshallingMinor clarity improvement.
-Extend the Savvy I/O support for Microsoft Dependency Injection with Newtonsoft JSON implementations. +Extend Savvy I/O’s Microsoft Dependency Injection support with Newtonsoft.Json marshalling implementations.test/Savvyio.Extensions.DependencyInjection.Text.Json.Tests/ServiceCollectionExtensionsTest.cs (2)
33-41: Also assert interface registration (IMarshaller) for stronger coverageVerifies consumers resolving the interface work as expected.
var provider = services.BuildServiceProvider(); var marshaller = provider.GetService<JsonMarshaller>(); Assert.NotNull(marshaller); + var iMarshaller = provider.GetService<IMarshaller>(); + Assert.NotNull(iMarshaller);Add missing using:
using System; using Codebelt.Extensions.Xunit; using Cuemon.Extensions.Text.Json.Formatters; using Microsoft.Extensions.DependencyInjection; using Savvyio.Extensions.DependencyInjection.Text.Json; using Savvyio.Extensions.Text.Json; +using Savvyio.Messaging; using Xunit;
74-83: Optionally validate default lifetime tooIf the extension defaults to Singleton, assert it to prevent regressions.
var descriptor = Assert.Single(services, d => d.ServiceType == typeof(JsonMarshaller)); Assert.Equal(ServiceLifetime.Scoped, descriptor.Lifetime); Assert.Equal(ServiceLifetime.Scoped, lifetime); + // Optional: verify default would be Singleton when not overridden + // var services2 = new ServiceCollection(); + // services2.AddJsonMarshaller(); + // var def = Assert.Single(services2, d => d.ServiceType == typeof(JsonMarshaller)); + // Assert.Equal(ServiceLifetime.Singleton, def.Lifetime);test/Savvyio.Extensions.NATS.Tests/Commands/NatsCommandQueueTest.cs (2)
13-15: Make fixture fields readonly to avoid accidental mutation across testsImproves test robustness.
- private IMarshaller _marshaller = JsonMarshaller.Default; - private NatsCommandQueueOptions _options = new (); + private readonly IMarshaller _marshaller = JsonMarshaller.Default; + private readonly NatsCommandQueueOptions _options = new();
48-50: Remove stray blank lineKeeps formatting tidy.
- + [Fact] public void Constructor_ShouldThrow_WhenOptionsAreInvalid()Savvyio.sln (1)
142-149: Additions of four DI JSON projects look correct; minor GUID consistency nit.Projects are wired with correct paths; consider standardizing project type GUID to the SDK-style C# GUID {9A19103F-16F7-4668-BE54-9A1E7A4F7556} for consistency with many entries above. Not blocking.
src/Savvyio.Extensions.DependencyInjection.Newtonsoft.Json/ServiceCollectionExtensions.cs (1)
19-23: Doc nit: state the exact default explicitly.Consider clarifying the default to match the code (Formatting.None).
Apply this minimal doc tweak:
-/// <param name="jsonSetup">The <see cref="NewtonsoftJsonFormatterOptions" /> which may be configured. Default is optimized for messaging.</param> +/// <param name="jsonSetup">The <see cref="NewtonsoftJsonFormatterOptions" /> which may be configured. Default sets <c>Settings.Formatting = Formatting.None</c> (optimized for messaging).</param>
| * [Savvyio.Extensions.DependencyInjection.Newtonsoft.Json](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.Newtonsoft.Json/) 📦 | ||
| * [Savvyio.Extensions.DependencyInjection.QueueStorage](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.QueueStorage/) 📦 | ||
| * [Savvyio.Extensions.DependencyInjection.RabbitMQ](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.RabbitMQ/) 📦 | ||
| * [Savvyio.Extensions.DependencyInjection.SimpleQueueService](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.SimpleQueueService/) 📦 | ||
| * [Savvyio.Extensions.DependencyInjection.Text.Json](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.Text.Json/) 📦 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Add DI JSON package links — LGTM
Links for the two new DI JSON extensions are correctly added and aligned with the 4.3.0 scope.
Run to confirm repo-wide discoverability (DocFX and App project reference):
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "DocFX includes:"
rg -n '"Savvyio\.Extensions\.DependencyInjection\.(Newtonsoft\.Json|Text\.Json)"' .docfx/docfx.json || true
echo "Savvyio.App.csproj reference to Text.Json DI extension:"
fd -H -t f Savvyio.App.csproj | xargs -I{} rg -n 'ProjectReference.+Savvyio\.Extensions\.DependencyInjection\.Text\.Json' {} || true
echo "README contains both DI JSON links once:"
rg -n 'Savvyio\.Extensions\.DependencyInjection\.(Newtonsoft\.Json|Text\.Json)' .nuget/Savvyio.App/README.mdLength of output: 1063
Include both DI JSON extensions in docs and project references
- .docfx/docfx.json: add entries for
Savvyio.Extensions.DependencyInjection.Newtonsoft.Json(and verifyText.Json) so the new packages are discoverable. - Savvyio.App.csproj: add a
<ProjectReference Include="..\Savvyio.Extensions.DependencyInjection.Newtonsoft.Json\Savvyio.Extensions.DependencyInjection.Newtonsoft.Json.csproj" />for the Newtonsoft.Json DI extension.
🧰 Tools
🪛 LanguageTool
[grammar] ~33-~33: There might be a mistake here.
Context: ...DependencyInjection.Newtonsoft.Json/) 📦 * [Savvyio.Extensions.DependencyInjection.Q...
(QB_NEW_EN)
[grammar] ~37-~37: There might be a mistake here.
Context: ...sions.DependencyInjection.Text.Json/) 📦 * [Savvyio.Extensions.Dispatchers](https://...
(QB_NEW_EN)
🤖 Prompt for AI Agents
In .nuget/Savvyio.App/README.md lines 33 to 37 the README lists DI JSON
extension packages but the repository and docs are missing references to the
Newtonsoft.Json DI extension; update .docfx/docfx.json to add an entry for
Savvyio.Extensions.DependencyInjection.Newtonsoft.Json (and verify the existing
Text.Json entry is correct) so the package appears in generated docs, and update
Savvyio.App.csproj to include a ProjectReference to
..\Savvyio.Extensions.DependencyInjection.Newtonsoft.Json\Savvyio.Extensions.DependencyInjection.Newtonsoft.Json.csproj
so the Newtonsoft.Json DI extension is referenced by the solution.
| * [Savvyio.Extensions.DependencyInjection.Newtonsoft.Json](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.Newtonsoft.Json/) 📦 | ||
| * [Savvyio.Extensions.DependencyInjection.QueueStorage](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.QueueStorage/) 📦 | ||
| * [Savvyio.Extensions.DependencyInjection.RabbitMQ](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.RabbitMQ/) 📦 | ||
| * [Savvyio.Extensions.DependencyInjection.SimpleQueueService](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.SimpleQueueService/) 📦 | ||
| * [Savvyio.Extensions.DependencyInjection.Text.Json](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.Text.Json/) 📦 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
❓ Verification inconclusive
Verify NuGet package availability
Quickly confirm both new package IDs resolve on NuGet.
🏁 Script executed:
#!/bin/bash
set -euo pipefail
pkgs=(
"Savvyio.Extensions.DependencyInjection.Newtonsoft.Json"
"Savvyio.Extensions.DependencyInjection.Text.Json"
)
for p in "${pkgs[@]}"; do
code=$(curl -s -o /dev/null -w '%{http_code}' "https://api.nuget.org/v3/registration5-gz-semver2/${p}/index.json")
if [[ "$code" == "200" ]]; then
echo "OK: ${p} exists on NuGet."
else
echo "MISS: ${p} not found (HTTP ${code}). Check link/name." >&2
fi
doneLength of output: 966
Fix missing NuGet packages
Both Savvyio.Extensions.DependencyInjection.Newtonsoft.Json and Savvyio.Extensions.DependencyInjection.Text.Json return HTTP 404 on NuGet. Ensure those packages are published (or correct the IDs/links) before merging.
🧰 Tools
🪛 LanguageTool
[grammar] ~33-~33: There might be a mistake here.
Context: ...DependencyInjection.Newtonsoft.Json/) 📦 * [Savvyio.Extensions.DependencyInjection.Q...
(QB_NEW_EN)
[grammar] ~37-~37: There might be a mistake here.
Context: ...sions.DependencyInjection.Text.Json/) 📦 * [Savvyio.Extensions.Dispatchers](https://...
(QB_NEW_EN)
🤖 Prompt for AI Agents
In .nuget/Savvyio.Commands/README.md around lines 33 to 37 the README lists
Savvyio.Extensions.DependencyInjection.Newtonsoft.Json and
Savvyio.Extensions.DependencyInjection.Text.Json but both package links return
404; verify the correct NuGet package IDs on nuget.org and either publish the
missing packages or update the README links to the correct IDs (or remove the
entries if they are not intended to be published), then confirm the links
resolve before merging.
| Version: 4.3.0 | ||
| Availability: .NET 9 and .NET 8 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Verify TFMs match the project file(s).
Availability lists .NET 9 and .NET 8. Please confirm the csproj for Savvyio.Extensions.DapperExtensions actually targets net9.0 and net8.0.
Run:
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Locate the csproj
fd -a '^Savvyio\.Extensions\.DapperExtensions\.csproj$' | tee /dev/stderr
# Show TargetFramework(s)
csproj="$(fd -a '^Savvyio\.Extensions\.DapperExtensions\.csproj$' | head -n1)"
echo "---- TargetFrameworks ----"
rg -nP '^\s*<TargetFrameworks?>' -n "$csproj" -C1 || true
echo "---- PackageReferences ----"
rg -nP 'PackageReference' "$csproj" -C0 || trueLength of output: 189
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Locate the .csproj file
csproj=$(find . -type f -name 'Savvyio.Extensions.DapperExtensions.csproj' | head -n1)
echo "CSProj path: $csproj"
# Show TargetFramework(s)
echo "---- TargetFramework(s) ----"
grep -n '<TargetFramework' "$csproj" || true
# Show PackageReferences for context
echo "---- PackageReferences ----"
grep -n 'PackageReference' "$csproj" || trueLength of output: 836
🏁 Script executed:
#!/bin/bash
set -euo pipefail
csproj=./src/Savvyio.Extensions.DapperExtensions/Savvyio.Extensions.DapperExtensions.csproj
echo "---- CSProj Path ----"
echo "$csproj"
echo "---- First 200 lines of the .csproj ----"
head -n 200 "$csproj" || trueLength of output: 1127
Add TargetFrameworks or update release notes
The project file at src/Savvyio.Extensions.DapperExtensions/Savvyio.Extensions.DapperExtensions.csproj does not specify any <TargetFramework> or <TargetFrameworks> elements, so it doesn’t actually target .NET 8 or .NET 9. Either add
<PropertyGroup>
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
</PropertyGroup>to the .csproj or adjust .nuget/Savvyio.Extensions.DapperExtensions/PackageReleaseNotes.txt to match the actual target frameworks.
🤖 Prompt for AI Agents
In .nuget/Savvyio.Extensions.DapperExtensions/PackageReleaseNotes.txt around
lines 1-2, the release notes claim availability for .NET 8 and .NET 9 but the
project
src/Savvyio.Extensions.DapperExtensions/Savvyio.Extensions.DapperExtensions.csproj
lacks a TargetFramework/TargetFrameworks entry; either add a PropertyGroup to
that .csproj specifying TargetFrameworks as net8.0;net9.0 (so the project
actually builds for those frameworks) or update the PackageReleaseNotes.txt to
reflect the real targeted frameworks; ensure the chosen fix is applied
consistently across the repo and commit the change.
| * [Savvyio.Extensions.DependencyInjection.Newtonsoft.Json](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.Newtonsoft.Json/) 📦 | ||
| * [Savvyio.Extensions.DependencyInjection.QueueStorage](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.QueueStorage/) 📦 | ||
| * [Savvyio.Extensions.DependencyInjection.RabbitMQ](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.RabbitMQ/) 📦 | ||
| * [Savvyio.Extensions.DependencyInjection.SimpleQueueService](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.SimpleQueueService/) 📦 | ||
| * [Savvyio.Extensions.DependencyInjection.Text.Json](https://www.nuget.org/packages/Savvyio.Extensions.DependencyInjection.Text.Json/) 📦 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Add a quick verification for new NuGet links and keep list order consistent.
- The two new DI JSON packages look correct. Please verify the links resolve and consider alphabetizing the DI.* section for maintainability.
You can run:
🏁 Script executed:
#!/bin/bash
set -euo pipefail
for p in Savvyio.Extensions.DependencyInjection.Newtonsoft.Json Savvyio.Extensions.DependencyInjection.Text.Json; do
echo "Checking $p ..."
curl -sI "https://www.nuget.org/packages/$p/" | gawk 'NR==1{print}'
doneLength of output: 808
Fix broken NuGet package links and sort DI. section*
- Savvyio.Extensions.DependencyInjection.Newtonsoft.Json and Savvyio.Extensions.DependencyInjection.Text.Json links return HTTP 404 – update them to the correct NuGet package URLs.
- Alphabetize the DI.* entries for consistency.
File: .nuget/Savvyio.Extensions.DependencyInjection.DapperExtensions/README.md lines 33-37
🧰 Tools
🪛 LanguageTool
[grammar] ~33-~33: There might be a mistake here.
Context: ...DependencyInjection.Newtonsoft.Json/) 📦 * [Savvyio.Extensions.DependencyInjection.Q...
(QB_NEW_EN)
[grammar] ~37-~37: There might be a mistake here.
Context: ...sions.DependencyInjection.Text.Json/) 📦 * [Savvyio.Extensions.Dispatchers](https://...
(QB_NEW_EN)
🤖 Prompt for AI Agents
In .nuget/Savvyio.Extensions.DependencyInjection.DapperExtensions/README.md
around lines 33 to 37, the two NuGet links for
Savvyio.Extensions.DependencyInjection.Newtonsoft.Json and
Savvyio.Extensions.DependencyInjection.Text.Json are broken (404) and the DI.*
list should be alphabetized; update those two links to the correct NuGet package
URLs (verify package IDs on nuget.org and replace the hrefs), then reorder the
DI.* list items so they are in alphabetical order.
| Version: 4.3.0 | ||
| Availability: .NET 9 and .NET 8 | ||
|
|
||
| # ALM | ||
| - CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs) | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Polish release notes formatting
Add a colon after CHANGED and replace non-breaking spaces with normal blank lines for consistency/readability.
-Version: 4.3.0
-Availability: .NET 9 and .NET 8
-
-# ALM
-- CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs)
-
+Version: 4.3.0
+Availability: .NET 9 and .NET 8
+
+# ALM
+- CHANGED: Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs)
+📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| Version: 4.3.0 | |
| Availability: .NET 9 and .NET 8 | |
| # ALM | |
| - CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs) | |
| Version: 4.3.0 | |
| Availability: .NET 9 and .NET 8 | |
| # ALM | |
| - CHANGED: Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs) | |
🧰 Tools
🪛 LanguageTool
[grammar] ~1-~1: There might be a mistake here.
Context: Version: 4.3.0 Availability: .NET 9 and .NET 8 # ALM ...
(QB_NEW_EN)
[grammar] ~2-~2: There might be a mistake here.
Context: ...n: 4.3.0 Availability: .NET 9 and .NET 8 # ALM - CHANGED Dependencies have been upg...
(QB_NEW_EN)
[grammar] ~4-~4: There might be a mistake here.
Context: ... Availability: .NET 9 and .NET 8 # ALM - CHANGED Dependencies have been upgraded ...
(QB_NEW_EN)
🤖 Prompt for AI Agents
In .nuget/Savvyio.Extensions.DependencyInjection.NATS/PackageReleaseNotes.txt
around lines 1 to 6, the release notes need minor formatting fixes: change the
header "CHANGED" to "CHANGED:" (add a colon) and replace any non-breaking space
characters with normal spaces/newlines so blank lines render correctly; ensure
there is a regular blank line between the Availability line and the "# ALM"
section and that list items remain on their own lines.
| # Savvyio.Extensions.DependencyInjection.NATS | ||
|
|
||
| Extend the Savvy I/O support for Microsoft Dependency Injection with official built-in JSON implementations. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Wrong package title; fix copy/paste.
Header says NATS but this is Text.Json’s README.
-# Savvyio.Extensions.DependencyInjection.NATS
+# Savvyio.Extensions.DependencyInjection.Text.Json
-
-Extend the Savvy I/O support for Microsoft Dependency Injection with official built-in JSON implementations.
+Extend Savvy I/O with Microsoft Dependency Injection support for System.Text.Json-based marshalling.📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| # Savvyio.Extensions.DependencyInjection.NATS | |
| Extend the Savvy I/O support for Microsoft Dependency Injection with official built-in JSON implementations. | |
| # Savvyio.Extensions.DependencyInjection.Text.Json | |
| Extend Savvy I/O with Microsoft Dependency Injection support for System.Text.Json-based marshalling. |
🤖 Prompt for AI Agents
In .nuget/Savvyio.Extensions.DependencyInjection.Text.Json/README.md around
lines 1 to 3, the header and opening line incorrectly refer to
"Savvyio.Extensions.DependencyInjection.NATS"; change the title to
"Savvyio.Extensions.DependencyInjection.Text.Json" and update the description to
reference the Text.Json JSON implementation (e.g., "Extend the Savvy I/O support
for Microsoft Dependency Injection with the official built‑in System.Text.Json
implementation.") so the README correctly describes the Text.Json package
instead of NATS.
| ## [4.3.0] - 2025-08-30 | ||
|
|
||
| This is a feature release that extends the two projects, `Savvyio.Extensions.Newtonsoft.Json` and `Savvyio.Extensions.Text.Json` with support for Microsoft Dependency Injection. | ||
|
|
||
| Also includes a service update that focuses on bumping package dependencies. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Clarify 4.3.0 wording: DI support is delivered via new DI packages, not the core JSON packages.
The current text suggests the non-DI JSON packages got DI support. Recommend rewording to avoid confusion.
-This is a feature release that extends the two projects, `Savvyio.Extensions.Newtonsoft.Json` and `Savvyio.Extensions.Text.Json` with support for Microsoft Dependency Injection.
+This is a feature release that adds two DI extension packages providing Microsoft Dependency Injection support for JSON marshalling:
+`Savvyio.Extensions.DependencyInjection.Newtonsoft.Json` and `Savvyio.Extensions.DependencyInjection.Text.Json`.📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ## [4.3.0] - 2025-08-30 | |
| This is a feature release that extends the two projects, `Savvyio.Extensions.Newtonsoft.Json` and `Savvyio.Extensions.Text.Json` with support for Microsoft Dependency Injection. | |
| Also includes a service update that focuses on bumping package dependencies. | |
| ## [4.3.0] - 2025-08-30 | |
| This is a feature release that adds two DI extension packages providing Microsoft Dependency Injection support for JSON marshalling: | |
| `Savvyio.Extensions.DependencyInjection.Newtonsoft.Json` and `Savvyio.Extensions.DependencyInjection.Text.Json`. | |
| Also includes a service update that focuses on bumping package dependencies. |
🤖 Prompt for AI Agents
CHANGELOG.md lines 7-11: reword the 4.3.0 entry to make clear that Dependency
Injection support is provided by new DI-specific packages rather than being
added to the core JSON packages; update the sentences to state that new packages
(e.g., Savvyio.Extensions.Newtonsoft.Json.DependencyInjection and
Savvyio.Extensions.Text.Json.DependencyInjection) were added to enable Microsoft
DI integration, and keep the note about dependency bumps unchanged.
| <ProjectReference Include="..\Savvyio.Extensions.DependencyInjection.QueueStorage\Savvyio.Extensions.DependencyInjection.QueueStorage.csproj" /> | ||
| <ProjectReference Include="..\Savvyio.Extensions.DependencyInjection.RabbitMQ\Savvyio.Extensions.DependencyInjection.RabbitMQ.csproj" /> | ||
| <ProjectReference Include="..\Savvyio.Extensions.DependencyInjection.SimpleQueueService\Savvyio.Extensions.DependencyInjection.SimpleQueueService.csproj" /> | ||
| <ProjectReference Include="..\Savvyio.Extensions.DependencyInjection.Text.Json\Savvyio.Extensions.DependencyInjection.Text.Json.csproj" /> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Add Text.Json DI reference — verify docs and packaging alignment
Good addition. Please ensure Savvyio.App’s release notes list this new DI extension (and Newtonsoft.Json DI if intentionally included elsewhere) so consumers see it discoverable.
Apply this to .nuget/Savvyio.App/PackageReleaseNotes.txt (v4.3.0 block):
- - Savvyio.Extensions.DependencyInjection.RabbitMQ
- - Savvyio.Extensions.DependencyInjection.SimpleQueueService
+ - Savvyio.Extensions.DependencyInjection.RabbitMQ
+ - Savvyio.Extensions.DependencyInjection.SimpleQueueService
+ - Savvyio.Extensions.DependencyInjection.Newtonsoft.Json
+ - Savvyio.Extensions.DependencyInjection.Text.Json
- Savvyio.Extensions.DispatchersRun to double-check consistency:
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "Project refs:"
rg -nP '\.Extensions\.DependencyInjection\.Text\.Json' src/Savvyio.App/Savvyio.App.csproj
echo "Release notes mentions:"
rg -n 'Savvyio\.Extensions\.DependencyInjection\.(Text|Newtonsoft)\.Json' .nuget/Savvyio.App/PackageReleaseNotes.txt || trueLength of output: 477
Update v4.3.0 release notes to include new DI extensions
The v4.3.0 entry in .nuget/Savvyio.App/PackageReleaseNotes.txt doesn’t list the new JSON DI packages. Add these lines under the existing list:
- Savvyio.Extensions.DependencyInjection.RabbitMQ
- Savvyio.Extensions.DependencyInjection.SimpleQueueService
+ - Savvyio.Extensions.DependencyInjection.Newtonsoft.Json
+ - Savvyio.Extensions.DependencyInjection.Text.Json
- Savvyio.Extensions.Dispatchers📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| <ProjectReference Include="..\Savvyio.Extensions.DependencyInjection.Text.Json\Savvyio.Extensions.DependencyInjection.Text.Json.csproj" /> | |
| - Savvyio.Extensions.DependencyInjection.RabbitMQ | |
| - Savvyio.Extensions.DependencyInjection.SimpleQueueService | |
| - Savvyio.Extensions.DependencyInjection.Newtonsoft.Json | |
| - Savvyio.Extensions.DependencyInjection.Text.Json | |
| - Savvyio.Extensions.Dispatchers |
🤖 Prompt for AI Agents
In src/Savvyio.App/Savvyio.App.csproj around line 30, the project now includes
Savvyio.Extensions.DependencyInjection.Text.Json but the v4.3.0 release notes in
.nuget/Savvyio.App/PackageReleaseNotes.txt were not updated; open that file,
find the v4.3.0 entry and add a bullet (or line) listing the new DI JSON
extension(s) (e.g. Savvyio.Extensions.DependencyInjection.Text.Json) under the
existing list so the release notes reflect the new package(s).
...dencyInjection.Newtonsoft.Json/Savvyio.Extensions.DependencyInjection.Newtonsoft.Json.csproj
Outdated
Show resolved
Hide resolved
...nsions.DependencyInjection.Text.Json/Savvyio.Extensions.DependencyInjection.Text.Json.csproj
Outdated
Show resolved
Hide resolved
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #38 +/- ##
==========================================
+ Coverage 74.81% 74.97% +0.16%
==========================================
Files 175 177 +2
Lines 3633 3681 +48
Branches 360 362 +2
==========================================
+ Hits 2718 2760 +42
- Misses 913 919 +6
Partials 2 2 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Co-authored-by: Copilot <[email protected]>
|
…README.md Co-authored-by: Copilot <[email protected]>
…xtensions.DependencyInjection.Text.Json.csproj Co-authored-by: Copilot <[email protected]>
…vyio.Extensions.DependencyInjection.Newtonsoft.Json.csproj Co-authored-by: Copilot <[email protected]>
…savvyio into v4.3.0/di-additions



This pull request introduces version 4.3.0 across multiple Savvyio packages, focusing on dependency upgrades and improved documentation and discoverability for new extension packages. The most important changes are the addition of new extension package references (notably for
Newtonsoft.JsonandText.Json), updates to package release notes, and the inclusion of comprehensive guidelines for unit testing and XML documentation within the codebase.Dependency and Package Updates:
Upgraded dependencies to the latest compatible versions for all supported target frameworks in
Savvyio.Core,Savvyio.Domain,Savvyio.Domain.EventSourcing,Savvyio.Commands, andSavvyio.Commands.Messaging[1] [2] [3] [4] [5] [6].Updated
PackageReleaseNotes.txtfiles to announce version 4.3.0 and list the new and existing package references, includingSavvyio.Extensions.DependencyInjection.Newtonsoft.JsonandSavvyio.Extensions.DependencyInjection.Text.Json.Documentation and Discoverability:
Added
Savvyio.Extensions.DependencyInjection.Newtonsoft.JsonandSavvyio.Extensions.DependencyInjection.Text.Jsonto the list of referenced projects in.docfx/docfx.json, improving documentation coverage and discoverability.Updated all relevant
README.mdfiles for core and extension packages to include links to the new extension packages, ensuring users are aware of these new integrations [1] [2] [3] [4] [5] [6].Development Guidelines:
.github/copilot-instructions.mdfile with detailed guidelines for writing unit tests and XML documentation in the Savvyio codebase, promoting consistency and maintainability for contributors.Summary by CodeRabbit
New Features
Improvements
Documentation
Tests
Chores