Masterly.BusinessRules.DependencyInjection
3.0.0
dotnet add package Masterly.BusinessRules.DependencyInjection --version 3.0.0
NuGet\Install-Package Masterly.BusinessRules.DependencyInjection -Version 3.0.0
<PackageReference Include="Masterly.BusinessRules.DependencyInjection" Version="3.0.0" />
<PackageVersion Include="Masterly.BusinessRules.DependencyInjection" Version="3.0.0" />
<PackageReference Include="Masterly.BusinessRules.DependencyInjection" />
paket add Masterly.BusinessRules.DependencyInjection --version 3.0.0
#r "nuget: Masterly.BusinessRules.DependencyInjection, 3.0.0"
#:package Masterly.BusinessRules.DependencyInjection@3.0.0
#addin nuget:?package=Masterly.BusinessRules.DependencyInjection&version=3.0.0
#tool nuget:?package=Masterly.BusinessRules.DependencyInjection&version=3.0.0
Masterly.BusinessRules.DependencyInjection
Registers business rules in Microsoft.Extensions.DependencyInjection: assembly scanning, an injectable IRuleRunner<T> per subject type, and a scoped IRuleRegistry for per-tenant rule sets.
This is a companion package of Masterly.BusinessRules, a composable business-rule engine for .NET.
Install
dotnet add package Masterly.BusinessRules.DependencyInjection
- Target framework:
netstandard2.1(.NET Core 3.0+, .NET 5+) - Dependencies:
Masterly.BusinessRules,Microsoft.Extensions.DependencyInjection.Abstractions10.0.14
Example
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Masterly.BusinessRules;
using Masterly.BusinessRules.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
public sealed class Order
{
public List<string> Items { get; } = new List<string>();
}
// A subject-typed rule: scanning finds it, and it can take services through its constructor.
public sealed class OrderItemsRequiredRule : BaseBusinessRule<Order>
{
public override string Code => "ORDER.NO_ITEMS";
public override string Message => "Order must contain at least one item.";
public override bool IsBroken(Order order) => order.Items.Count == 0;
}
// The handler never lists rules itself.
public sealed class PlaceOrderHandler
{
private readonly IRuleRunner<Order> _rules;
public PlaceOrderHandler(IRuleRunner<Order> rules)
{
_rules = rules;
}
public Task HandleAsync(Order order, CancellationToken cancellationToken)
{
return _rules.CheckAllAsync(order, cancellationToken); // throws BusinessRuleValidationException when broken
}
}
public static class Registration
{
public static IServiceCollection AddOrderRules(this IServiceCollection services)
{
return services.AddBusinessRules(typeof(OrderItemsRequiredRule).Assembly);
}
}
Scanning registers every concrete IBusinessRule<T> / IAsyncBusinessRule<T>, an IRuleRunner<T> per subject type and the IRuleRegistry. It is deterministic, and untyped rules are scanned only when you set IncludeUntypedRules = true.
Documentation
Scan options, lifetimes, the rule registry and scoped parameters are covered in the full documentation: https://github.com/a7mdfre7at/Masterly.BusinessRules#readme
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.1 is compatible. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- Masterly.BusinessRules (>= 3.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.14)
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 |
|---|---|---|
| 3.0.0 | 51 | 10/28/2026 |
Release notes for version 3.0.0: https://github.com/a7mdfre7at/Masterly.BusinessRules/blob/master/CHANGELOG.md