RuleEval.Database
1.1.2
See the version list below for details.
dotnet add package RuleEval.Database --version 1.1.2
NuGet\Install-Package RuleEval.Database -Version 1.1.2
<PackageReference Include="RuleEval.Database" Version="1.1.2" />
<PackageVersion Include="RuleEval.Database" Version="1.1.2" />
<PackageReference Include="RuleEval.Database" />
paket add RuleEval.Database --version 1.1.2
#r "nuget: RuleEval.Database, 1.1.2"
#:package RuleEval.Database@1.1.2
#addin nuget:?package=RuleEval.Database&version=1.1.2
#tool nuget:?package=RuleEval.Database&version=1.1.2
RuleEval
📚 Dokumentace: architecture.md · nuget-packages.md · publishing-nuget.md
Moderní open-source rule engine pro .NET 8
Obsah
- Rychlý start
- EvaluationContext — pozičně nebo dle názvů
- Vyhodnocení z databáze
- NuGet balíčky
- Dokumentace
- Build a test
- Licence
Rychlý start
dotnet add package RuleEval
using RuleEval.Abstractions;
using RuleEval.Core;
var ruleSet = RuleSetBuilder
.Create("pricing")
.AddInput("segment")
.AddInput("age")
.AddRule(rule => rule
.When("segment", ".*Perspektiva.*")
.When("age", "INTERVAL<15;24>")
.ThenOutput("formula", "C2/240")
.WithPrimaryKey("id", 1))
.Build();
var evaluator = new RuleSetEvaluator();
var result = evaluator.EvaluateFirst(
ruleSet,
EvaluationContext.FromPositional("7BN Perspektiva Důchod", 15m),
new EvaluationOptions(CaptureDiagnostics: true));
Console.WriteLine(result.Status);
Console.WriteLine(result.Match?.Outputs[0].RawValue); // C2/240
Volitelná integrace s Microsoft.Extensions.DependencyInjection
using Microsoft.Extensions.DependencyInjection;
using RuleEval.DependencyInjection;
services.AddRuleEval();
EvaluationContext — pozičně nebo dle názvů
Vstupní hodnoty lze předat dvěma způsoby. Pořadí pozičních hodnot odpovídá sloupci Order definice pravidel.
// Pozičně — hodnoty ve stejném pořadí jako vstupní pole v RuleSet
var result = evaluator.EvaluateFirst(
ruleSet,
EvaluationContext.FromPositional("7BN Perspektiva Důchod", 15m));
// Dle názvů — nezávislé na pořadí
var result = evaluator.EvaluateFirst(
ruleSet,
EvaluationContext.FromNamed(new Dictionary<string, object?>
{
["segment"] = "7BN Perspektiva Důchod",
["age"] = 15m,
}));
Console.WriteLine(result.Status); // Matched
Console.WriteLine(result.Match?.Outputs[0].RawValue); // C2/240
Vyhodnocení z databáze
dotnet add package RuleEval.Database
dotnet add package RuleEval.Database.DependencyInjection
DB schéma vrací sloupce (Name, ColNr, Order, Type) a data (Col01, Col02, …).
ColNr určuje fyzický sloupec v datové tabulce, Order určuje pořadí pro poziční vyhodnocení.
SQL Server
using RuleEval.Database;
using RuleEval.Database.DependencyInjection;
// Registrace
services.AddRuleEvalDatabase(connectionString: "...",
columnsStoredProcedure: "[Rule].p_GetSchemaColBySchemaCode",
rowsStoredProcedure: "[Rule].p_GetTranslatorDataBySchemaCode");
// Vyhodnocení
var repository = serviceProvider.GetRequiredService<IRuleSetRepository>();
// Pozičně — pořadí dle sloupce Order v DB
var result = await repository.EvaluateFirstAsync(
"Rule1Schema1",
EvaluationContext.FromPositional("EE.*hodnota", "Ahoj.*hodnota"));
// Dle názvů — Name sloupce z DB schématu
var result = await repository.EvaluateFirstAsync(
"Rule1Schema1",
EvaluationContext.FromNamed(new Dictionary<string, object?>
{
["Input1 Obor"] = "EE.*hodnota",
["Input2"] = "Ahoj.*hodnota",
}));
Console.WriteLine(result.Status); // Matched
Console.WriteLine(result.Match?.Outputs[0].RawValue); // Vystup1
Zkratky na RuleSetRepository
// Výsledek evaluace
EvaluationResult result = await repository.EvaluateFirstAsync(key, context);
// Hodí výjimku při NoMatch / AmbiguousMatch / InvalidInput
EvaluationResult result = await repository.EvaluateFirstOrThrowAsync(key, context);
// Přímo hodnota konkrétního výstupního pole, nebo null
string? value = await repository.GetFirstOutputAsync(key, context, outputName: "Vystup x");
// Hodí výjimku, pokud výstup chybí
string value = await repository.GetFirstOutputOrThrowAsync(key, context, outputName: "Vystup x");
NuGet balíčky
| Projekt | NuGet | Popis |
|---|---|---|
RuleEval.Abstractions |
📦 | Contracts a immutable doménový model; referujte, pokud píšete knihovny integrující se s RuleEval |
RuleEval |
📦 | Evaluační engine, built-in matchery (regex, INTERVAL, equality) |
RuleEval.Caching |
— | Interní projekt bez vlastního NuGet; zkompilován do RuleEval.DependencyInjection a RuleEval.Database. Obsahuje IRuleSetCache, MemoryRuleSetCache, NoCacheRuleSetCache |
RuleEval.Diagnostics |
— | Interní projekt bez vlastního NuGet. Obsahuje IRuleEvaluationObserver, observer pattern pro výsledky evaluace |
RuleEval.DependencyInjection |
📦 | AddRuleEval() registrace core služeb do IServiceCollection |
RuleEval.Database.Abstractions |
— | Interní projekt bez vlastního NuGet; zkompilován do RuleEval.Database. Obsahuje IRuleSetSource, IRuleSetRepository — provider-neutral DB contracts |
RuleEval.Database |
📦 | DbRuleSetMapper, RuleSetRepository, PostgreSqlRuleSetSource, SqlServerRuleSetSource |
RuleEval.Database.DependencyInjection |
📦 | AddRuleEvalDatabase() registrace DB služeb do IServiceCollection |
Dokumentace
| Dokument | Obsah |
|---|---|
| docs/architecture.md | Architektura, design rozhodnutí, závislosti mezi vrstvami, evaluační flow |
| docs/nuget-packages.md | Přehled balíčků, typické instalační scénáře, dependency graph |
| docs/publishing-nuget.md | Jak verzovat, zabalit a publikovat NuGet balíčky |
| samples/RuleEval.Samples | Kompletní ukázky použití včetně DI, cache a DB vrstvy |
| benchmarks/RuleEval.Benchmarks | BenchmarkDotNet výkonnostní testy |
Build a test
dotnet restore RuleEval.sln
dotnet build RuleEval.sln -c Release
dotnet test RuleEval.sln -c Release --collect:"XPlat Code Coverage"
Licence
MIT. Viz LICENSE.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. 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. |
-
net8.0
- Npgsql (>= 9.0.3)
- RuleEval (>= 1.1.2)
- RuleEval.Abstractions (>= 1.1.2)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on RuleEval.Database:
| Package | Downloads |
|---|---|
|
RuleEval.Database.DependencyInjection
Microsoft.Extensions.DependencyInjection integration for RuleEval database-backed rule loading. Registers DbRuleSetMapper, RuleSetRepository, and IRuleSetSource implementations. |
GitHub repositories
This package is not used by any popular GitHub repositories.