https://github.com/fusonic/dotnet-extensions
The Fusonic .NET 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.
https://github.com/fusonic/dotnet-extensions
Last synced: over 1 year ago
JSON representation
The Fusonic .NET 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.
- Host: GitHub
- URL: https://github.com/fusonic/dotnet-extensions
- Owner: fusonic
- License: mit
- Created: 2020-08-31T15:31:46.000Z (almost 6 years ago)
- Default Branch: main
- Last Pushed: 2025-03-28T12:20:03.000Z (over 1 year ago)
- Last Synced: 2025-03-30T08:08:18.103Z (over 1 year ago)
- Language: C#
- Homepage:
- Size: 720 KB
- Stars: 25
- Watchers: 4
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Fusonic Extensions
[](https://github.com/fusonic/dotnet-extensions/actions?query=workflow%3Abuild)
[](https://www.nuget.org/packages?q=Fusonic.Extensions)
[](https://github.com/fusonic/dotnet-extensions/blob/main/LICENSE)
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.
Packages
===============
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.
[](https://www.nuget.org/packages/Fusonic.Extensions.AspNetCore/)
Provides ASP.NET Core extensions (Middelwares, Utilities ...). See the [documentation](docs/AspNetCore/README.md) for more details.
[](https://www.nuget.org/packages/Fusonic.Extensions.Common/)
Adds serval small helpers and common abstractions. See the [documentation](docs/Common/README.md) for more details.
[](https://www.nuget.org/packages/Fusonic.Extensions.Email/)
Adds support for sending emails. See the [documentation](docs/Email/README.md) for more details.
[](https://www.nuget.org/packages/Fusonic.Extensions.EntityFrameworkCore/)
Extensions for EF Core.
[](https://www.nuget.org/packages/Fusonic.Extensions.Hangfire/)
Provides Hangfire extensions, especially suited for CQRS developement. (Out of band processing). See the [documentation](docs/Hangfire/README.md) for more details.
[](https://www.nuget.org/packages/Fusonic.Extensions.Hosting/)
Provides services and extensions for hosting. See the [documentation](docs/Hosting/README.md) for more details.
[](https://www.nuget.org/packages/Fusonic.Extensions.Mediator/)
Provides simple mediator implementation. See the [documentation](docs/Mediator/README.md) for more details.
[](https://www.nuget.org/packages/Fusonic.Extensions.UnitTests/)
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](docs/UnitTests/README.md) for more details.
[](https://www.nuget.org/packages/Fusonic.Extensions.UnitTests.ServiceProvider/)
Xunit-based testing base classes. Supports dependency injection with Microsofts Dependency Injection framework (ServiceProvider).. See the [unit test documentation](docs/UnitTests/README.md) for more details.
[](https://www.nuget.org/packages/Fusonic.Extensions.UnitTests.SimpleInjector/)
Xunit-based testing base classes. Supports dependency injection with SimpleInjector.. See the [unit test documentation](docs/UnitTests/README.md) for more details.
[](https://www.nuget.org/packages/Fusonic.Extensions.UnitTests.EntityFrameworkCore/)
Adds database support using EF Core to the unit tests. See the [unit test documentation](docs/UnitTests/README.md) for more details.
[](https://www.nuget.org/packages/Fusonic.Extensions.UnitTests.EntityFrameworkCore.Npgsql/)
Adds support for database tests using EF Core with PostgreSQL. See the [unit test documentation](docs/UnitTests/README.md) for more details.
[](https://www.nuget.org/packages/Fusonic.Extensions.UnitTests.EntityFrameworkCore.SqlServer/)
Adds support for database tests using EF Core with Microsoft SQL Server. See the [unit test documentation](docs/UnitTests/README.md) for more details.
Important information
===============
Goals
--------------------
- Reusable class libraries with high quality and high reusability
- Supports quality and velocity in fusonic projects
- More quality because of strong testing focus
- Stable
Non-Goals
--------------------
- 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)
Naming
--------------------
Fusonic.Extensions.* (Ex. Fusonic.Extensions.Abstractions)
"AspNetCore" specific extensions land in "AspNetCore" "namespace".
What code can be added to Fusonic Extensions?
--------------------
- 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)
Standards (QA/Versioning, Unit-Tests)
--------------------
- 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](https://github.com/dotnet/core/blob/main/roadmap.md).
Allowed base dependencies
--------------------
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
Integration Workflow
--------------------
1. Create a proposal on Gitlab.com (fusonic developers) or Github.com (external developers)
2. Detailed description of the use cases and API (also with MR request)
3. Notify Fusonic Extensions "Design member board" (David Roth, Johannes Hartmann)
4. Discussion in GL Issue or Mr Request or Design Meeting
5. New APIs require the approval of at least one board member
6. New APIs should be communicated (announcement)