Savvyio.Core
5.0.2
See the version list below for details.
dotnet add package Savvyio.Core --version 5.0.2
NuGet\Install-Package Savvyio.Core -Version 5.0.2
<PackageReference Include="Savvyio.Core" Version="5.0.2" />
<PackageVersion Include="Savvyio.Core" Version="5.0.2" />
<PackageReference Include="Savvyio.Core" />
paket add Savvyio.Core --version 5.0.2
#r "nuget: Savvyio.Core, 5.0.2"
#:package Savvyio.Core@5.0.2
#addin nuget:?package=Savvyio.Core&version=5.0.2
#tool nuget:?package=Savvyio.Core&version=5.0.2
Savvyio.Core
Provides the fundamental abstractions and classes for supporting a complete flow of DDD, CQRS and Event Sourcing concepts.
About
An open-source project (MIT license) that provides a SOLID and clean .NET class library for writing DDD, CQRS and Event Sourcing applications.
Your versatile DDD, CQRS and Event Sourcing companion for modern development with .NET 9 and .NET 10.
It is, by heart, free, flexible and built to extend and boost your agile codebelt.
Related Packages
- Savvyio.App 🏭
- Savvyio.Commands 📦
- Savvyio.Commands.Messaging 📦
- Savvyio.Core 📦
- Savvyio.Domain 📦
- Savvyio.Domain.EventSourcing 📦
- Savvyio.EventDriven 📦
- Savvyio.EventDriven.Messaging 📦
- Savvyio.Extensions.Dapper 📦
- Savvyio.Extensions.DapperExtensions 📦
- Savvyio.Extensions.DependencyInjection 📦
- Savvyio.Extensions.DependencyInjection.Dapper 📦
- Savvyio.Extensions.DependencyInjection.DapperExtensions 📦
- Savvyio.Extensions.DependencyInjection.Domain 📦
- Savvyio.Extensions.DependencyInjection.EFCore 📦
- Savvyio.Extensions.DependencyInjection.EFCore.Domain 📦
- Savvyio.Extensions.DependencyInjection.EFCore.Domain.EventSourcing 📦
- Savvyio.Extensions.DependencyInjection.NATS 📦
- Savvyio.Extensions.DependencyInjection.Newtonsoft.Json 📦
- Savvyio.Extensions.DependencyInjection.QueueStorage 📦
- Savvyio.Extensions.DependencyInjection.RabbitMQ 📦
- Savvyio.Extensions.DependencyInjection.SimpleQueueService 📦
- Savvyio.Extensions.DependencyInjection.Text.Json 📦
- Savvyio.Extensions.Dispatchers 📦
- Savvyio.Extensions.EFCore 📦
- Savvyio.Extensions.EFCore.Domain 📦
- Savvyio.Extensions.EFCore.Domain.EventSourcing 📦
- Savvyio.Extensions.NATS 📦
- Savvyio.Extensions.Newtonsoft.Json 📦
- Savvyio.Extensions.QueueStorage 📦
- Savvyio.Extensions.RabbitMQ 📦
- Savvyio.Extensions.SimpleQueueService 📦
- Savvyio.Extensions.Text.Json 📦
- Savvyio.Messaging 📦
- Savvyio.Queries 📦
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net9.0 is compatible. 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 is compatible. 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. |
-
net10.0
- Cuemon.Extensions.Collections.Generic (>= 10.2.1)
- Cuemon.Extensions.Core (>= 10.2.1)
- Cuemon.Extensions.Reflection (>= 10.2.1)
- Cuemon.Security.Cryptography (>= 10.2.1)
-
net9.0
- Cuemon.Extensions.Collections.Generic (>= 10.2.1)
- Cuemon.Extensions.Core (>= 10.2.1)
- Cuemon.Extensions.Reflection (>= 10.2.1)
- Cuemon.Security.Cryptography (>= 10.2.1)
NuGet packages (14)
Showing the top 5 NuGet packages that depend on Savvyio.Core:
| Package | Downloads |
|---|---|
|
Savvyio.Domain
Provides the fundamental classes and interfaces to work with the concepts of DDD (Domain Driven Design). |
|
|
Savvyio.Extensions.DependencyInjection
Extend the Savvy I/O core assemblies with support for Microsoft Dependency Injection. |
|
|
Savvyio.App
Provides a complete and convenient set of API additions for building a DDD, CQRS and Event Sourcing enabled .NET application using Microsoft Dependency Injection, Microsoft Entity Framework Core, Dapper, AWS SNS/SQS, Azure Queue Storage/Azure Event Grid and RabbitMQ Worker Queue/Publish-Subscribe. |
|
|
Savvyio.Extensions.EFCore
Extend the Savvy I/O core assemblies with support for Microsoft Entity Framework Core. |
|
|
Savvyio.Commands
Provides the fundamental classes to work with the Command part of the CQRS pattern (Command and Query Responsibility Segregation). |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 5.0.3 | 544 | 2/20/2026 |
| 5.0.2 | 569 | 2/15/2026 |
| 5.0.1 | 668 | 1/24/2026 |
| 5.0.0 | 623 | 11/15/2025 |
| 4.4.2 | 777 | 10/20/2025 |
| 4.4.1 | 853 | 9/15/2025 |
| 4.4.0 | 690 | 8/31/2025 |
| 4.3.0 | 734 | 8/29/2025 |
| 4.2.0 | 750 | 8/25/2025 |
| 4.1.1 | 679 | 6/16/2025 |
| 4.1.0 | 759 | 6/9/2025 |
| 4.0.3 | 746 | 5/28/2025 |
| 4.0.2 | 668 | 4/18/2025 |
| 4.0.1 | 693 | 1/31/2025 |
| 4.0.0 | 651 | 11/13/2024 |
| 4.0.0-rc.1 | 195 | 11/12/2024 |
| 4.0.0-preview.2 | 137 | 10/6/2024 |
| 4.0.0-preview.1 | 144 | 9/6/2024 |
| 3.0.0 | 1,110 | 9/1/2024 |
| 3.0.0-preview.3 | 171 | 8/13/2024 |
Version: 5.0.2
Availability: .NET 10 and .NET 9
# ALM
- CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs)
Version: 5.0.1
Availability: .NET 10 and .NET 9
# ALM
- CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs)
Version: 5.0.0
Availability: .NET 10 and .NET 9
# ALM
- ADDED Support for TFM .NET 10 (LTS)
- REMOVED Support for TFM .NET 8 (LTS)
- CHANGED Dependencies have been upgraded to the latest compatible versions for all supported target frameworks (TFMs)
Version: 4.4.2
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.4.1
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.4.0
Availability: .NET 9 and .NET 8
# New Features
- ADDED IAsyncHealthCheckProvider interface in the Savvyio.Diagnostics namespace that defines a contract for asynchronously providing an underlying target that can be probed to assess health status
- ADDED IHealthCheckProvider interface in the Savvyio.Diagnostics namespace that defines a contract for providing an underlying target that can be probed to assess health status
# 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)
Version: 4.2.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.1.1
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.1.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.0.3
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.0.2
Availability: .NET 9 and .NET 8
# ALM
- CHANGED Dependencies to latest and greatest with respect to TFMs
Version: 4.0.1
Availability: .NET 9 and .NET 8
# ALM
- CHANGED Dependencies to latest and greatest with respect to TFMs
Version: 4.0.0
Availability: .NET 9 and .NET 8
# ALM
- REMOVED Support for TFM .NET 6 (LTS)
- CHANGED Dependencies to latest and greatest with respect to TFMs
# New Features
- ADDED HandlerDiscoveryModel record in the Savvyio namespace that represents a model for handler services discovery
- ADDED IHandlerServicesDescriptor interface in the Savvyio namespace that defines a contract about implementations of the IHandler{TRequest} interface such as name, declared members and what type of request they handle
Version: 3.0.0
Availability: .NET 8 and .NET 6
# Breaking Changes
- MOVED MessageExtensions class from the Savvyio.Messaging.Cryptography namespace to its own assembly (Savvyio.Messaging)
- MOVED SignedMessage record from the Savvyio.Messaging.Cryptography namespace to its own assembly (Savvyio.Messaging)
- MOVED SignedMessageOptions class from the Savvyio.Messaging.Cryptography namespace to its own assembly (Savvyio.Messaging)
- MOVED Message record from the Savvyio.Messaging namespace to its own assembly (Savvyio.Messaging)
- MOVED MessageExtensions class from the Savvyio.Messaging namespace to its own assembly (Savvyio.Messaging)
- MOVED MessageOptions class from the Savvyio.Messaging namespace to its own assembly (Savvyio.Messaging)
# ALM
- CHANGED Dependencies to latest and greatest with respect to TFMs
# New Features
- ADDED AcknowledgedEventArgs class in the Savvyio.Messaging namespace that provides data for message related operations
- ADDED IAcknowledgeable interface in the Savvyio.Messaging namespace that defines a generic way to make a message acknowledgeable
- ADDED AsyncEventHandler{TEventArgs} delegate in the Savvyio namespace that represents the method that will handle an event when the event provides data asynchronously
# Improvements
- CHANGED IMessage interface to inherit from IAcknowledgeable
Version: 2.2.0
Availability: .NET 8, .NET 7 and .NET 6
# ALM
- CHANGED Dependencies to latest and greatest with respect to TFMs
Version: 2.1.0
Availability: .NET 8, .NET 7 and .NET 6
# ALM
- CHANGED Dependencies to latest and greatest with respect to TFMs
# New Features
- ADDED MessageExtensions class in the Savvyio.Messaging.Cryptography namespace that consist of extension methods for the IMessage{T} interface: Sign{T} and CheckSignature{T}
- ADDED MessageExtensions class in the Savvyio.Messaging namespace that consist of extension methods for the IMessage{T} interface: Clone{T}
Version: 2.0.0
Availability: .NET 8, .NET 7 and .NET 6
# ALM
- CHANGED Dependencies to latest and greatest with respect to TFMs
# New Features
- ADDED ISignedMessage{T} interface in the Savvyio.Messaging.Cryptography namespace that defines a generic way to wrap an IRequest inside a cryptographically signed message
- ADDED SignedMessage{T} record in the Savvyio.Messaging.Cryptography namespace that provides a default implementation of the ISignedMessage{T} interface
- ADDED SignedMessageOptions class in the Savvyio.Messaging.Cryptography namespace that specifies options that is related to wrapping an IRequest implementation inside a cryptographically signed message
- ADDED IMarshaller interface in the Savvyio namespace that defines methods for serializing and deserializing objects to and from a Stream
- EXTENDED MetadataExtensions class in the Savvyio namespace with new extension methods for the IMetadata interface: GetMemberType{T}
- ADDED ICommand interface in the Savvyio.Commands namespace that defines a marker interface that specifies an intention to do something (e.g. change the state)
- ADDED ICommandDispatcher interface in the Savvyio.Commands namespace that defines a Command dispatcher that uses Fire-and-Forget/In-Only MEP
- ADDED ICommandHandler interface in the Savvyio.Commands namespace that defines a handler responsible for objects that implements the ICommand interface
- ADDED ITracedAggregateRepository interface in the Savvyio.Domain.EventSourcing namespace that defines a generic way of abstracting traced read- and writable repositories (CRud) that is optimized for Domain Driven Design
- ADDED ITracedAggregateRoot interface in the Savvyio.Domain.EventSourcing namespace that defines an Event Sourcing capable contract of an Aggregate as specified in Domain Driven Design
- ADDED ITracedDomainEvent interface in the Savvyio.Domain.EventSourcing namespace that specifies something that happened in the domain that you want other parts of the same domain (in-process/inner-application) to be aware of
- ADDED IAggregateRepository interface in the Savvyio.Domain namespace that defines a generic way of abstracting persistent repositories (CRUD) that is optimized for Domain Driven Design
- ADDED IAggregateRoot interface in the Savvyio.Domain namespace that defines a marker interface of an Aggregate as specified in Domain Driven Design
- ADDED IDomainEvent interface in the Savvyio.Domain namespace that defines a marker interface that specifies something that happened in the domain that you want other parts of the same domain (in-process/inner-application) to be made aware of
- ADDED IDomainEventDispatcher interface in the Savvyio.Domain namespace that defines a Domain Event dispatcher that uses Fire-and-Forget/In-Only MEP
- ADDED IDomainEventHandler interface in the Savvyio.Domain namespace that specifies a handler responsible for objects that implements the IDomainEvent interface
- ADDED IEntity interface in the Savvyio.Domain namespace that defines an Entity as specified in Domain Driven Design
- ADDED IIntegrationEvent interface in the Savvyio.EventDriven namespace that defines a marker interface that specifies something that happened when an Aggregate was successfully persisted and you want other subsystems (out-process/inter-application) to be made aware of
- ADDED IIntegrationEventDispatcher interface in the Savvyio.EventDriven namespace that defines an Integration Event dispatcher that uses Fire-and-Forget/In-Only MEP
- ADDED IIntegrationEventHandler interface in the Savvyio.EventDriven namespace that specifies a handler responsible for objects that implements the IIntegrationEvent interface
- ADDED IQuery interface in the Savvyio.Queries namespace that defines a marker interface that specifies something that returns data
- ADDED IQueryDispatcher interface in the Savvyio.Queries namespace that defines a Query dispatcher that uses Request-Reply/In-Out MEP
- ADDED IQueryHandler interface in the Savvyio.Queries namespace that defines a handler responsible for objects that implements the IQuery interface
- ADDED ISignedCloudEvent{T} interface in the Savvyio.EventDriven.Messaging.CloudEvents.Cryptography namespace that defines a generic way to wrap an IRequest inside a CloudEvents compliant message format
- ADDED ICloudEvent{T} interface in the Savvyio.EventDriven.Messaging.CloudEvents namespace that defines a generic way to wrap an IRequest inside a CloudEvents compliant message format
- ADDED AssemblyContext class in the Savvyio.Reflection namespace that provides a set of static methods and properties to manage and filter assemblies in the current application domain
# Improvements
- CHANGED SetTimestamp{T} extension method on the MetadataExtensions class in the Savvyio namespace to include an optional nullable DateTime parameter
- CHANGED Request record in the Savvyio namespace to automatically set the member type of the current implementation in the default constructor
# Breaking Changes
- CHANGED Time property on the IMessage{T} interface in the Savvyio.Messaging namespace from a string signature to a nullable DateTime signature
- CHANGED Time property on the Message{T} class in the Savvyio.Messaging namespace from a string signature to a nullable DateTime signature
- CHANGED ReceiveAsync method on the IReceiver{TRequest} interface in the Savvyio.Messaging namespace from Task{IEnumerable{IMessage{TRequest}}} to IAsyncEnumerable{IMessage{TRequest}}
- REMOVED ReceiveAsyncOptions class from the Savvyio.Messaging namespace
Version: 1.1.0
Availability: .NET 7.0, .NET 6.0
# New Features
- ADDED IMessage{T} interface in the Savvyio.Messaging namespace that defines a generic way to wrap an IRequest inside a message
- ADDED IPointToPointChannel{TRequest} interface in the Savvyio.Messaging namespace that defines an interface for a bus that is used for interacting with other subsystems (out-process/inter-application) to do something (e.g., change the state)
- ADDED IPublisher{TRequest} interface in the Savvyio.Messaging namespace that defines a publisher/sender channel for interacting with other subsystems (out-process/inter-application) to be notified (e.g., made aware of something that has happened)
- ADDED IPublishSubscribeChannel{TRequest} interface in the Savvyio.Messaging namespace that defines an interface for a bus that is used for interacting with other subsystems (out-process/inter-application) to be notified (e.g., made aware of something that has happened)
- ADDED IReceiver{TRequest} interface in the Savvyio.Messaging namespace that defines a consumer/receiver channel used by subsystems to receive a command and perform one or more actions (e.g., change the state)
- ADDED ISender{TRequest} interface in the Savvyio.Messaging namespace that defines a producer/sender channel used for interacting with other subsystems (out-process/inter-application) to do something (e.g., change the state)
- ADDED ISubscriber{TRequest} interface in the Savvyio.Messaging namespace that defines a subscriber/receiver channel used by subsystems to subscribe to messages (typically events) to be made aware of something that has happened
- ADDED Message record in the Savvyio.Messaging namespace that provides a default implementation of the IMessage{T} interface
- ADDED MessageOptions class in the Savvyio.Messaging namespace that is related to wrapping an IRequest implementation inside a message
- ADDED ReceiveAsyncOptions class in the Savvyio.Messaging namespace that specifies options that is related to implementations of the IReceiver{TRequest} interface
- ADDED SubscribeAsyncOptions class in the Savvyio.Messaging namespace that specifies options that is related to implementations of the ISubscriber{TRequest} interface
Version: 1.0.0
Availability: .NET 7.0, .NET 6.0
# New Features
- ADDED HandlerFactory class in the Savvyio namespace that provides access to factory methods for creating and configuring generic handlers that supports MEP
- ADDED HandlerServicesDescriptor class in the Savvyio namespace that provides information, in a developer friendly way, about implementations of the IHandler{TRequest} interface such as name, declared members and what type of request they handle
- ADDED IDataSource interface in the Savvyio namespace that defines a marker interface that specifies the actual I/O communication with a source of data
- ADDED IHandler interface in the Savvyio namespace that defines a marker interface that specifies a handler
- ADDED IIdentity interface in the Savvyio namespace that an identity typically associated with a storage such as a database
- ADDED IMetadata interface in the Savvyio namespace that defines a generic way to associate metadata with any type of object
- ADDED IMetadataDictionary interface in the Savvyio namespace that defines a generic way to support metadata capabilities
- ADDED IRequest interface in the Savvyio namespace that defines a marker interface that specifies a request/model/event
- ADDED MetadataDictionary class in the Savvyio namespace that provides a default implementation of the IMetadataDictionary interface
- ADDED MetadataExtensions class in the Savvyio namespace that consist of extension methods for the IMetadata interface: GetCausationId, GetCorrelationId, SetCausationId, SetCorrelationId, SetEventId, SetTimestamp, SetMemberType, SaveMetadata, MergeMetadata
- ADDED MetadataFactory class in the Savvyio namespace that provides access to factory methods for maintaining metadata in models
- ADDED Request record in the Savvyio namespace that represents the base class from which all implementations of the IRequest interface should derive
- ADDED SavvyioOptions class in the Savvyio namespace that specifies options that is related to setting up Savvy I/O services
- ADDED SavvyioOptionsExtensions class in the Savvyio namespace that consist of extension methods for the SavvyioOptions class: AddDispatchers, AddHandlers
- ADDED TaskExtensions class in the Savvyio namespace that consist of extension methods for the Task{T} class: SingleOrDefaultAsync
- ADDED IDataStore interface in the Savvyio.Data namespace that defines a marker interface that specifies an abstraction of persistent data access based on the Data Access Object pattern
- ADDED IDeletableDataStore interface in the Savvyio.Data namespace that defines a generic way of abstracting deletable data access objects (cruD)
- ADDED IPersistentDataStore interface in the Savvyio.Data namespace that defines a generic way of abstracting persistent data access objects (CRUD)
- ADDED IReadableDataStore interface in the Savvyio.Data namespace that defines a generic way of abstracting readable data access objects (cRud)
- ADDED ISearchableDataStore interface in the Savvyio.Data namespace that defines a generic way of abstracting searchable data access objects (cRud)
- ADDED IWritableDataStore interface in the Savvyio.Data namespace that defines a generic way of abstracting writable data access objects (CrUd)
- ADDED Dispatcher class in the Savvyio.Dispatchers namespace that represents the base class from which all implementations of the dispatcher concept should derive
- ADDED FireForgetDispatcher class in the Savvyio.Dispatchers namespace that provides a generic dispatcher that uses Fire-and-Forget/In-Only MEP
- ADDED IDispatcher interface in the Savvyio.Dispatchers namespace that defines a marker interface that specifies a dispatcher that encapsulates how a set of objects interact
- ADDED IServiceLocator interface in the Savvyio.Dispatchers namespace that provides a generic way to locate implementations of service objects
- ADDED RequestReplyDispatcher class in the Savvyio.Dispatchers namespace that provides a generic dispatcher that uses Request-Reply/In-Out MEP
- ADDED ServiceLocator class in the Savvyio.Dispatchers namespace that provides a default implementation of the IServiceLocator interface
- ADDED DomainException class in the Savvyio.Domain namespace that is the exception that is thrown when a domain model is not in a valid state
- ADDED IDeletableRepository interface in the Savvyio.Domain namespace that defines a generic way of abstracting deletable repositories (cruD)
- ADDED IPersistentRepository interface in the Savvyio.Domain namespace that defines a generic way of abstracting persistent repositories (CRUD)
- ADDED IReadableRepository interface in the Savvyio.Domain namespace that defines a generic way of abstracting readable repositories (cRud)
- ADDED IRepository interface in the Savvyio.Domain namespace that defines a marker interface that specifies an abstraction of persistent data access based on the Repository Pattern
- ADDED ISearchableRepository interface in the Savvyio.Domain namespace that defines a generic way of abstracting searchable repositories (cRud)
- ADDED IUnitOfWork interface in the Savvyio.Domain namespace that defines a transaction that bundles multiple IRepository{TEntity,TKey}" calls into a single unit
- ADDED IWritableRepository interface in the Savvyio.Domain namespace that defines a generic way of abstracting writable repositories (CrUd)
- ADDED FireForgetRegistryExtensions class in the Savvyio.Handlers namespace that consist of extension methods for the IFireForgetRegistry{TRequest} interface: RegisterAsync
- ADDED IFireForgetActivator interface in the Savvyio.Handlers namespace that specifies a way of invoking Fire-and-Forget/In-Only MEP delegates that handles TRequest
- ADDED IFireForgetHandler interface in the Savvyio.Handlers namespace that defines a generic handler that uses Fire-and-Forget/In-Only MEP
- ADDED IFireForgetRegistry interface in the Savvyio.Handlers namespace that specifies a Fire-and-Forget/In-Only MEP registry that store delegates responsible of handling type TRequest
- ADDED IRequestReplyActivator interface in the Savvyio.Handlers namespace that specifies a way of invoking Request-Reply/In-Out MEP delegates that handles TRequest
- ADDED IRequestReplyHandler interface in the Savvyio.Handlers namespace that defines a generic handler that uses Request-Reply/In-Out MEP
- ADDED IRequestReplyRegistry interface in the Savvyio.Handlers namespace that specifies a Request-Reply/In-Out MEP registry that store delegates responsible of handling type TRequest
- ADDED OrphanedHandlerException class in the Savvyio.Dispatchers namespace that provides the exception that is thrown when an IHandler{TRequest} implementation cannot be resolved
- ADDED RequestReplyRegistryExtensions class in the Savvyio.Handlers namespace that consist of extension methods for the IRequestReplyRegistry{TRequest} interface: RegisterAsync