Schemata.Mapping.Foundation 1.0.0-preview.24217.9

This is a prerelease version of Schemata.Mapping.Foundation.
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package Schemata.Mapping.Foundation --version 1.0.0-preview.24217.9                
NuGet\Install-Package Schemata.Mapping.Foundation -Version 1.0.0-preview.24217.9                
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="Schemata.Mapping.Foundation" Version="1.0.0-preview.24217.9" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Schemata.Mapping.Foundation --version 1.0.0-preview.24217.9                
#r "nuget: Schemata.Mapping.Foundation, 1.0.0-preview.24217.9"                
#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 Schemata.Mapping.Foundation as a Cake Addin
#addin nuget:?package=Schemata.Mapping.Foundation&version=1.0.0-preview.24217.9&prerelease

// Install Schemata.Mapping.Foundation as a Cake Tool
#tool nuget:?package=Schemata.Mapping.Foundation&version=1.0.0-preview.24217.9&prerelease                

Schemata

Application Framework aims on modular business applications.

GitHub Workflow Status Codecov license

netstandard2.0 netstandard2.1 net6.0 net8.0

Quick Start

dotnet new web
dotnet add package --prerelease Schemata.Application.Complex.Targets
var builder = WebApplication.CreateBuilder(args)
                            .UseSchemata(schema => {
                                 schema.UseLogging();
                                 schema.UseDeveloperExceptionPage();

                                 schema.ConfigureServices(services => {
                                     services.AddTransient(typeof(IRepositoryAddAsyncAdvice<>), typeof(MyAdviceAddAsync<>));

                                     services.AddRepository(typeof(MyRepository<>))
                                             .UseEntityFrameworkCore<MyDbContext>((sp, options) => options.UseSqlServer(schema.Configuration.GetConnectionString("Default")));

                                     services.AddDistributedMemoryCache();
                                 });

                                 schema.UseForwardedHeaders();
                                 schema.UseHttps();
                                 schema.UseCookiePolicy();

                                 schema.UseSession();

                                 schema.UseCors();
                                 schema.UseRouting();
                                 schema.UseControllers();
                                 schema.UseJsonSerializer();

                                 schema.UseModular();

                                 schema.UseIdentity();
                                 schema.UseAuthorization(options => {
                                            options.AddEphemeralEncryptionKey()
                                                   .AddEphemeralSigningKey();
                                        })
                                       .UseCodeFlow()
                                       .UseRefreshTokenFlow()
                                       .UseDeviceFlow()
                                       .UseIntrospection()
                                       .UseCaching();
                                 schema.UseWorkflow();

                                 // You can also utilize UseAutoMapper() once you've incorporated the Schemata.Mapping.AutoMapper package into your project.
                                 schema.UseMapster()
                                       .Map<Source, Destination>(map => {
                                            map.For(d => d.DisplayName).From(s => s.Name);
                                            map.For(d => d.Age).From(s => s.Age).Ignore((s, d) => s.Age < 18);
                                            map.For(d => d.Grade).Ignore()
                                               .For(d => d.Sex).From(s => s.Sex.ToString());
                                        });

                                 schema.UseResource()
                                       .MapHttp()
                             });

var app = builder.Build();

app.Run();

Fields

Features

Features are modular components that can be integrated during the application startup process.

Each feature must implement the ISimpleFeature interface.

Features are characterized by Order and Priority, both of which are Int32 values. The Order determines the sequence in which the ConfigureServices methods are invoked. The Priority establishes the sequence for invoking the Configure<Application|Endpoints> methods.

The range [0, 1_000_000_000) and (2_147_000_000, 2_147_400_000] for Order and Priority is reserved for built-in features and Schemata extensions.

Built-in Features

A built-in feature can be activated by calling the UseXXX method on the SchemataBuilder instance. These features may also have additional configuration methods.

Priority Feature Description
100_110_000 Logging Asp.Net Logging Middleware
100_120_000 HttpLogging Asp.Net HTTP Logging Middleware
100_130_000 W3CLogging Asp.Net W3C Logging Middleware
110_000_000 DeveloperExceptionPage Asp.Net Developer Exception Page Middleware
110_100_000 ForwardedHeaders Asp.Net Forwarded Headers Middleware
120_000_000 Https Asp.Net HTTPS & HTTPS Redirection Middlewares
130_000_000 CookiePolicy Asp.Net Cookie Policy Middleware
140_000_000 Routing Asp.Net Routing Middleware
141_100_000 Quota Asp.Net Rate Limiter Middleware
150_000_000 Cors Asp.Net CORS Middleware
160_000_000 Authentication Asp.Net Authentication & Authorization Middlewares
170_000_000 Session Asp.Net Session Middleware
210_000_000 Controllers Asp.Net MVC Middlewares, without Views
210_100_000 JsonSerializer Configure System.Text.Json to use snake_case and handle JavaScript's 53-bits integers

Extension Features

An extension feature can be activated in the same way as a built-in feature.

Priority Package Feature Description
310_000_000 Schemata.Identity.Foundation Identity Schemata Identity Foundation
320_000_000 Schemata.Authorization.Foundation Authorization Schemata Authorization Foundation
340_000_000 Schemata.Mapping.Foundation Mapping Schemata Mapper Foundation
350_000_000 Schemata.Workflow.Foundation Workflow Schemata Workflow Foundation
360_000_000 Schemata.Resource.Foundation Resource Schemata Resource Service
360_100_000 Schemata.Resource.Http Resource (MapHttp) Schemata Resource Service for HTTP
2_147_400_000 Schemata.Modular Modular Modularization

Compliance

Schemata is designed to comply with .NET Standard 2.0, .NET Standard 2.1, and the two most recent .NET Long-Term Support (LTS) versions, which are .NET 6.0 and .NET 8.0 at the time of writing.

Some packages may have additional compliance requirements, which are documented below.

Package Compliance
Schemata.DSL netstandard2.0
Schemata.Core net6.0 net8.0
Schemata.Modular net6.0 net8.0
Schemata.Authorization.Foundation net6.0 net8.0
Schemata.Identity.Foundation net6.0 net8.0
Schemata.Mapping.Foundation net6.0 net8.0
Schemata.Resource.Foundation net6.0 net8.0
Schemata.Workflow.Foundation net6.0 net8.0

Schemata.Authorization.Foundation

Schemata Authorization Foundation is designed to comply with the OpenID Connect Core 1.0 specification.

Schemata.Identity.Foundation

Schemata Identity Foundation is designed to comply with Asp.Net Core Identity.

Additionally, we bring the Bearer Token Authentication Scheme and Core Identity API to platforms that do not support it.

Schemata.Mapping.Foundation

The Schemata Mapping Foundation is designed to be compatible with various mapping libraries, including AutoMapper and Mapster, among others.

It provides a unified interface for these libraries, enabling developers to switch between them without modifying their code.

Schemata.Workflow.Foundation

Unfortunately, the Schemata Workflow Foundation is not yet compliant with enterprise standards such as BPMN 2.0.

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

NuGet packages (3)

Showing the top 3 NuGet packages that depend on Schemata.Mapping.Foundation:

Package Downloads
Schemata.Workflow.Foundation

Schemata Application Framework - Workflow Foundation

Schemata.Mapping.Mapster

Schemata Application Framework - Mapper (using Mapster)

Schemata.Mapping.AutoMapper

Schemata Application Framework - Mapper (using AutoMapper)

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.0-preview.24370.42 65 7/20/2024
1.0.0-preview.24305.58 56 6/5/2024
1.0.0-preview.24259.22 61 5/9/2024
1.0.0-preview.24230.15 54 4/30/2024
1.0.0-preview.24227.10 62 4/27/2024
1.0.0-preview.24226.92 54 4/26/2024
1.0.0-preview.24226.39 59 4/26/2024
1.0.0-preview.24225.65 59 4/25/2024
1.0.0-preview.24225.61 55 4/25/2024
1.0.0-preview.24225.33 39 4/25/2024
1.0.0-preview.24224.26 56 4/24/2024
1.0.0-preview.24223.62 55 4/23/2024
1.0.0-preview.24223.23 52 4/23/2024
1.0.0-preview.24222.70 55 4/22/2024
1.0.0-preview.24222.23 56 4/22/2024
1.0.0-preview.24222.21 54 4/22/2024
1.0.0-preview.24222.20 56 4/22/2024
1.0.0-preview.24221.62 56 4/21/2024
1.0.0-preview.24221.60 50 4/21/2024
1.0.0-preview.24219.37 51 4/19/2024
1.0.0-preview.24219.35 47 4/19/2024
1.0.0-preview.24218.65 44 4/18/2024
1.0.0-preview.24217.50 71 4/17/2024
1.0.0-preview.24217.16 54 4/17/2024
1.0.0-preview.24217.15 48 4/17/2024
1.0.0-preview.24217.9 45 4/17/2024
1.0.0-preview.24216.60 57 4/16/2024
1.0.0-preview.24216.55 53 4/16/2024
1.0.0-preview.24215.70 49 4/15/2024
1.0.0-preview.24213.26 62 4/13/2024
1.0.0-preview.24213.25 50 4/13/2024
1.0.0-preview.24213.21 55 4/13/2024
1.0.0-preview.24213.20 50 4/13/2024
1.0.0-preview.24213.11 65 4/13/2024
1.0.0-preview.24213.8 55 4/13/2024
1.0.0-preview.24213.5 54 4/13/2024
1.0.0-preview.24212.62 43 4/12/2024
1.0.0-preview.24212.52 49 4/12/2024
1.0.0-preview.24212.51 47 4/12/2024
1.0.0-preview.24212.43 51 4/12/2024
1.0.0-preview.24212.37 55 4/12/2024
1.0.0-preview.24212.36 46 4/12/2024
1.0.0-preview.24212.29 52 4/12/2024
1.0.0-preview.24212.24 52 4/12/2024
1.0.0-preview.24212.17 50 4/12/2024
1.0.0-preview.24211.59 51 4/11/2024
1.0.0-preview.24211.57 44 4/11/2024
1.0.0-preview.24211.54 49 4/11/2024
1.0.0-preview.24211.51 44 4/11/2024
1.0.0-preview.24211.50 46 4/11/2024
1.0.0-preview.24211.49 47 4/11/2024
1.0.0-preview.24211.47 45 4/11/2024
1.0.0-preview.24211.24 59 4/11/2024
1.0.0-preview.24211.23 52 4/11/2024
1.0.0-preview.24211.21 51 4/11/2024
1.0.0-preview.24211.18 53 4/11/2024
1.0.0-preview.24210.56 52 4/10/2024
1.0.0-preview.24210.52 45 4/10/2024
1.0.0-preview.24210.51 50 4/10/2024
1.0.0-preview.24210.49 51 4/10/2024
1.0.0-preview.24210.43 57 4/10/2024
1.0.0-preview.24210.42 49 4/10/2024
1.0.0-preview.24210.34 53 4/10/2024
1.0.0-preview.24210.31 51 4/10/2024
1.0.0-preview.24210.30 49 4/10/2024
1.0.0-preview.24209.57 60 4/9/2024
1.0.0-preview.24209.56 67 4/9/2024
1.0.0-preview.24209.35 57 4/9/2024
1.0.0-preview.24209.19 60 4/9/2024
1.0.0-preview.24209.9 61 4/9/2024
1.0.0-preview.24208.59 60 4/8/2024