The Fusonic Extensions project aggregates several thoughtfully designed, reusable class libraries, which can be used in modern .NET application development. Fusonic successfully uses these libraries in its own individual projects. Some packages are general purpose libs which can be used by any kind of .net project (console, web, rich client). Other packages may be best suited for ASP.NET Core development. Because we believe that they can be useful for the broader community, we open source it under a permissive license.
Currently primary development takes place at a private repository at Gitlab.com. The project on Github.com is updated on a daily basis, but does not include any issues managed at Gitlab. However, we are happily accepting issues and pull requests on Github as well! Feel free to open an issue or merge request. If we see broader community engagement in the future, we may consider switching our primary development to Github.
Fusonic Extensions follows the official yearly .NET release cycle. Latest Fusonic Extensions main branch targets .NET 8.0.
Fusonic Extensions consists of several thoughtfully designed class libraries which are split into logical areas. Documentation is provided per package. In order to increase versioning and deployment complexity, all packages share a common semantic versioning scheme.
Provides ASP.NET Core extensions (Middelwares, Utilities ...). See the documentation for more details.
Adds serval small helpers and common abstractions. See the documentation for more details.
Adds support for sending emails. See the documentation for more details.
Provides Hangfire extensions, especially suited for CQRS developement. (Out of band processing). See the documentation for more details.
Provides services and extensions for hosting. See the documentation for more details.
Provides simple mediator implementation. See the documentation for more details.
Xunit-based testing base classes with support for dependency injection. Libraries supporting specific DI containers (SimpleInjector, ServiceProvider) are in separate packages. See the unit test documentation for more details.
Xunit-based testing base classes. Supports dependency injection with Microsofts Dependency Injection framework (ServiceProvider).. See the unit test documentation for more details.
Xunit-based testing base classes. Supports dependency injection with SimpleInjector.. See the unit test documentation for more details.
Adds database support using EF Core to the unit tests. See the unit test documentation for more details.
Adds support for database tests using EF Core with PostgreSQL. See the unit test documentation for more details.
Adds support for database tests using EF Core with Microsoft SQL Server. See the unit test documentation for more details.
- Reusable class libraries with high quality and high reusability
- Supports quality and velocity in fusonic projects
- More quality because of strong testing focus
- Stable
- We do not implement framework-code but focus on re-usable class libraries
- No DI abstractions necessary (SimpleInjector is a committed core library used in Fusonic Extensions)
Fusonic.Extensions.* (Ex. Fusonic.Extensions.Abstractions)
"AspNetCore" specific extensions land in "AspNetCore" "namespace".
- Reusable abstract logic which is generally valid and meaningful.
- Stability: Code should not be very volatile and, at best, tested. It should change as little as possible to the public API.
- Extensible: Logic should, if reasonably practicable, be extensible and flexible (eg virtual methods)
- All code must be unit-tested
- Breaking changes shall be avoided. We use semantic versioning: https://semver.org/
- Major releases are aligned with the yearly .NET release schedule.
If possible, only .NET BCL libraries should be referenced. Especially with abstract code. We try to reference as few dependencies as possible. However, we agree on the following core technologies, if absolutely necessary for the meaningfulness of the package:
- SimpleInjector
- Entity FrameworkCore
- Create a proposal on Gitlab.com (fusonic developers) or Github.com (external developers)
- Detailed description of the use cases and API (also with MR request)
- Notify Fusonic Extensions "Design member board" (David Roth, Johannes Hartmann)
- Discussion in GL Issue or Mr Request or Design Meeting
- New APIs require the approval of at least one board member
- New APIs should be communicated (announcement)