Savvyio.Core 4.0.0-rc.1

This is a prerelease version of Savvyio.Core.
There is a newer version of this package available.
See the version list below for details.
dotnet add package Savvyio.Core --version 4.0.0-rc.1                
NuGet\Install-Package Savvyio.Core -Version 4.0.0-rc.1                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Savvyio.Core" Version="4.0.0-rc.1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Savvyio.Core --version 4.0.0-rc.1                
#r "nuget: Savvyio.Core, 4.0.0-rc.1"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Savvyio.Core as a Cake Addin
#addin nuget:?package=Savvyio.Core&version=4.0.0-rc.1&prerelease

// Install Savvyio.Core as a Cake Tool
#tool nuget:?package=Savvyio.Core&version=4.0.0-rc.1&prerelease                

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.

Savvy I/O Flow

It is, by heart, free, flexible and built to extend and boost your agile codebelt.

Product 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 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (12)

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.Extensions.EFCore

Extend the Savvy I/O core assemblies with support for Microsoft Entity Framework Core.

Savvyio.Extensions.Dapper

Extend the Savvy I/O core assemblies with support for Dapper.

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
4.0.0 297 11/13/2024
4.0.0-rc.1 109 11/12/2024
4.0.0-preview.2 55 10/6/2024
4.0.0-preview.1 57 9/6/2024
3.0.0 631 9/1/2024
3.0.0-preview.3 85 8/13/2024
3.0.0-preview.2 44 8/4/2024
3.0.0-preview.1 43 7/31/2024
2.2.0 657 4/10/2024
2.1.0 905 3/5/2024
2.1.0-preview.17 76 3/3/2024
2.1.0-preview.14 71 3/2/2024
2.1.0-preview.12 67 2/28/2024
2.1.0-preview 542 2/26/2024
2.0.0 629 2/11/2024
2.0.0-preview.16 74 2/5/2024
2.0.0-preview.13 160 1/7/2024
2.0.0-preview.6 110 1/3/2024
2.0.0-preview 611 1/2/2024
1.2.0-preview 717 11/23/2023
1.1.0 2,362 12/6/2022
1.0.0 2,471 11/9/2022
0.8.0-rc 909 6/1/2022

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