Skip to content
CAI
Software that uses CAICheck a score

dasiths/NEventLite

46.5

Weak · 21 September 2026

2.6k

lines of production code

C#

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

NEventLite is a .NET library that implements the Event Sourcing pattern, providing a framework for building domain models that track state changes as a sequence of events. It introduces a MasterSession to manage aggregate roots and uncommitted changes, ensuring thread-safe access and versioning. The system supports multiple storage backends, including in-memory, EventStore, and snapshot-based persistence, with integration tests verifying end-to-end workflows. Additionally, it offers dependency injection extensions for Autofac and Microsoft's DI container to simplify application setup.

Features

Add Autofac integration sample with domain model and handlers

Added a new Autofac-based sample project (NEventLite.Samples.Autofac) that demonstrates how to wire up the NEventLite framework using the Autofac dependency injection container. This includes the NEventLiteModule for registration, a custom MyEventPublisher for event logging, and a complete set of domain objects (Schedule, Todo, Snapshots), event classes, and command handlers (CreateSchedule, CreateTodo, UpdateTodoName, CompleteTodo) that utilize the master session pattern.

src/Samples/NEventLite.Samples.Common · medium confidence

Add Autofac sample demonstrating dependency injection

The sample application now includes a new DependencyInjection.cs file that configures the service container using Microsoft.Extensions.DependencyInjection. It demonstrates registering event storage providers (both in-memory and EventStore-based), handlers, and aggregate sessions, providing a concrete example of how to wire up the framework with a DI container.

src/Samples/NEventLite.Samples.ConsoleApp · high confidence

Add DI extensions for Autofac and Microsoft.DependencyInjection

New extension methods are provided for both Autofac and Microsoft's built-in dependency injection containers, enabling automatic registration of the master session, aggregate repositories, and sessions. This simplifies setup by allowing applications to register all aggregates in a single call, with support for both full generic type registration and a convenient GUID-scoped session interface.

src/Extensions · high confidence

Add Schedule aggregate with todo management

A new Schedule aggregate root is introduced in the Samples project, implementing the ISnapshottable interface to manage a list of todos. This domain model supports creating, updating, and completing todos, with event-driven state updates and snapshotting capabilities for persistence.

Samples · high confidence

Introduce master session pattern for aggregate tracking

Added new \AggregateRoot\ and \MasterSession\ classes to implement a master session pattern. The \AggregateRoot\ now tracks uncommitted changes and manages versioning, while the \MasterSession\ provides a centralized way to load, attach, detach, and save aggregates, ensuring thread-safe access via a sync lock.

NEventLite · high confidence

Updated solution file to include Autofac integration samples and extensions

The NEventLite solution file has been updated to include new projects for Autofac integration, specifically \NEventLite.Samples.Autofac\ and \NEventLite.Extensions.Autofac\, alongside other existing projects like the in-memory and EventStore storage providers.

src · high confidence

Behavioural changes

Updated Bootstrap 3.4.1 theme and MVC scaffolding in the NEventLite example

The NEventLite MVC example project has been updated with Bootstrap 3.4.1 theme styles and a new \.ebextensions\ configuration that grants file system permissions for the App\_Data directory. The update also includes the standard ASP.NET MVC 5 scaffolding files, such as \BundleConfig.cs\ for bundling jQuery, Bootstrap, and Modernizr, \RouteConfig.cs\ for default routing, and \FilterConfig.cs\ for global error handling.

legacy/v1.0 · high confidence

Test coverage

Added integration tests for the new MasterSession and end-to-end repository workflows

Added integration tests for the new MasterSession and end-to-end repository workflows. The new EndToEndTests verify that aggregates can be created, modified, and reloaded from both the standard Repository (with snapshots) and the EventOnlyRepository. The MasterSessionTests confirm that the MasterSession correctly routes requests to the appropriate repository and handles invalid aggregate types or missing repositories by throwing ArgumentExceptions.

src/NEventLite · high confidence

Dependencies

NEventLite dependency and project structure updates

This change updates the NEventLite project structure and dependencies. The main framework library targets netstandard2.0 and references Newtonsoft.Json 12.0.3. The Microsoft DI extension targets netstandard2.0 and references Microsoft.Extensions.DependencyInjection 2.2.0. The Autofac extension targets netstandard2.0 and references Autofac 5.1.2. The EventStore storage provider references EventStore.Client 5.0.1. The InMemory storage provider references Newtonsoft.Json 13.0.2. The integration tests reference Shouldly 3.0.2 and xunit 2.4.1. The console sample references EventStore.Client 5.0.1 and Microsoft.Extensions.DependencyInjection 3.0.0-preview3.1. The common samples reference Newtonsoft.Json 12.0.3. The legacy v1.0 examples and storage providers are also updated with their respective package versions.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 43 → 47 (+3.5)
  • Rubric changed (rubric-2026.08.18 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 55 → 53 (-2.3)
  • Architecture 93 → 95 (+2.4)
  • Maturity 32 → 41 (+9.2)
  • Readiness 49 → 47 (-3.0)
  • Security 75 → 65 (-9.6)
  • Performance 44 → 48 (+4.3)

Resolved (50)

  • Bounded contexts not declared
  • Change coupling: InMemoryEventStorageProvider.cs ↔ InMemorySnapshotStorageProvider.cs (src/Storage/NEventLite.StorageProviders.InMemory/InMemoryEventStorageProvider.cs)
  • High CVE: Microsoft.NETCore.App 2.1.0
  • High CVE: Microsoft.NETCore.App 2.1.0
  • High CVE: Microsoft.NETCore.App 2.1.0
  • High CVE: Microsoft.NETCore.App 2.1.0
  • High CVE: Newtonsoft.Json 11.0.2
  • High CVE: Newtonsoft.Json 12.0.3
  • High CVE: System.Text.RegularExpressions 4.3.0
  • Inconsistent capitalization of 'Snapshot' in type names. 'IMockSnapShot' uses mixed case ('SnapShot') while all other storage providers and interfaces use 'Snapshot' (lowercase 's').
  • Low XML-doc coverage: NEventLite (src/NEventLite/NEventLite.csproj)
  • Low XML-doc coverage: NEventLite.Extensions.Autofac (src/Extensions/NEventLite.Extensions.Autofac/NEventLite.Extensions.Autofac.csproj)
  • Low XML-doc coverage: NEventLite.Extensions.Microsoft.DependencyInjection (src/Extensions/NEventLite.Extensions.Microsoft.DependencyInjection/NEventLite.Extensions.Microsoft.DependencyInjection.csproj)
  • Low XML-doc coverage: NEventLite.Samples.Autofac (src/Samples/NEventLite.Samples.Autofac/NEventLite.Samples.Autofac.csproj)
  • Low XML-doc coverage: NEventLite.Samples.Common (src/Samples/NEventLite.Samples.Common/NEventLite.Samples.Common.csproj)
  • Low XML-doc coverage: NEventLite.Samples.ConsoleApp (src/Samples/NEventLite.Samples.ConsoleApp/NEventLite.Samples.ConsoleApp.csproj)
  • Low XML-doc coverage: NEventLite.StorageProviders.EventStore (src/Storage/NEventLite.StorageProviders.EventStore/NEventLite.StorageProviders.EventStore.csproj)
  • Low XML-doc coverage: NEventLite.StorageProviders.InMemory (src/Storage/NEventLite.StorageProviders.InMemory/NEventLite.StorageProviders.InMemory.csproj)
  • Low cohesion: Schedule (LCOM4 4) (src/Samples/NEventLite.Samples.Common/Domain/Schedule/Schedule.cs)
  • Low: security finding (details withheld)
  • …and 30 more

New (37)

  • Build failed
  • CommentedOutCode (legacy/v1.0/src/Framework/Extension/EventExtension.cs)
  • Documentation: no contributor guidance (README.md)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • End-of-life runtime: .NET netcoreapp2.1
  • End-of-life runtime: .NET netcoreapp3.1
  • Inconsistent naming for domain concepts. The properties Cat and Desc are abbreviations for 'Category' and 'Description'. However, the types NoteCategoryChangedEvent and NoteDescriptionChangedEvent use the full words. Furthermore, the Note entity uses Category and Title/Description (implied by methods like ChangeCategory and ChangeDescription). Using abbreviations in DTOs/Events while using full words in domain events and methods creates inconsistency.
  • Inconsistent naming for similar retrieval operations. MyInMemoryReadModelStorage uses GetByID while MyReadRepository uses GetNote. While one is storage-specific and the other repository-specific, they both retrieve a Note entity by ID. The inconsistency lies in the verb/noun structure (GetByID vs GetNote) and the specificity of the parameter name (id vs id in signature but different method names). More critically, GetByID is often considered less descriptive than GetById or GetNoteById.
  • Low XML-doc coverage: NEventLite (legacy/v1.0/src/Framework/NEventLite.csproj)
  • Low XML-doc coverage: NEventLite Example (legacy/v1.0/src/Examples/NEventLite Example/NEventLite Example.csproj)
  • Low XML-doc coverage: NEventLite Example MVC (legacy/v1.0/src/Examples/NEventLite Example MVC/NEventLite Example MVC.csproj)
  • Low XML-doc coverage: NEventLite Storage Providers (legacy/v1.0/src/Storage Providers/NEventLite Storage Providers.csproj)
  • Low: security finding (details withheld)
  • Low: security finding (details withheld)
  • Low: security finding (details withheld)
  • Low: security finding (details withheld)
  • Low: security finding (details withheld)
  • Low: security finding (details withheld)
  • Low: security finding (details withheld)
  • …and 17 more

API surface

  • Unchanged — 1 HTTP endpoints

Architecture

  • Containers 0 added · 0 removed · contexts 1 added · 2 removed · edges 0 added · 1 removed

Added bounded contexts (1)

  • NEventLite_Example

Removed bounded contexts (2)

  • NEventLite
  • Samples

Removed dependency edges (was a dependency, now gone) (1)

  • Samples → NEventLite

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

dasiths/NEventLite was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 1742b7ba48a3ced35c4e407b8be3401526d40ade — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-28e75b8e3254.