magic.library 17.3.9

dotnet add package magic.library --version 17.3.9
                    
NuGet\Install-Package magic.library -Version 17.3.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="magic.library" Version="17.3.9" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="magic.library" Version="17.3.9" />
                    
Directory.Packages.props
<PackageReference Include="magic.library" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add magic.library --version 17.3.9
                    
#r "nuget: magic.library, 17.3.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.
#:package magic.library@17.3.9
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=magic.library&version=17.3.9
                    
Install as a Cake Addin
#tool nuget:?package=magic.library&version=17.3.9
                    
Install as a Cake Tool

magic.library - Tying Magic together

This project helps you to wire up everything related to Magic. Normally you'd use it simply like the following from your startup class in your .Net 8 Web API project.

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using magic.library;

namespace magic.backend
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            // Initializing Magic.
            services.AddMagic(Configuration);
        }

        public void Configure(IApplicationBuilder app)
        {
            // Initializing Magic.
            app.UseMagic(Configuration);
        }
    }
}

However, you can also take more control over how things are actually wired up, by instead of using the "do all methods" called AddMagic and UseMagic, invoke some of the specialized initialization methods, you can find below.

  • IServiceCollection.AddMagicCaching
  • IServiceCollection.AddMagicHttp
  • IServiceCollection.AddMagicLogging
  • IServiceCollection.AddMagicSignals
  • IServiceCollection.AddMagicExceptions
  • IServiceCollection.AddMagicEndpoints
  • IServiceCollection.AddMagicAuthorization
  • IServiceCollection.AddMagicFileServices
  • IServiceCollection.AddMagicFileServices
  • IServiceCollection.AddMagicConfiguration
  • IServiceCollection.AddMagicScheduler
  • IServiceCollection.AddMagicMail
  • IServiceCollection.AddMagicLambda
  • IServiceCollection.AddMagicSockets

The above methods is basically what the AddMagic method actually does, and they're extension methods of IServiceCollection, that can be found in the magic.library namespace. Similar alternatives to UseMagic can be found below.

  • IApplicationBuilder.UseMagicExceptions
  • IApplicationBuilder.UseMagicStartupFiles
  • IApplicationBuilder.UseMagicScheduler
  • IApplicationBuilder.UseMagicCors

If you use these methods instead of the "do all methods", your motivation would probably be to replace one of these methods with your own implementation, to exchange the default wiring, by (for instance) using a "virtual database based file system" by creating your own service implementation of for instance IFileService from "magic.lambda.io", or use a different logging provider than the default, etc. If you wish to do this, you'd probably benefit from looking at what the default implementation of your method does, to understand the requirements from your method. Doing this is very powerful, and allows you to change the way the system behaves by default - But is also definitely considered an "advanced exercise".

Exceptions handlers

Magic allows you to provide a custom exceptions handler on a per folder level. This overrides the default exception logic with a custom exception handler expected to be named "exceptions.hl" and found within the folder hierarchy where an HTTP invocation is resolved. For instance, if you wish to create your own exception handler for a specific module called "foo", you can create an exception handler file called "/files/modules/foo/exceptions.hl", and expect this file to be invoked every time an unhandled exception occurs, anywhere inside of your "foo" folder. This allows you to transform an unhandled exception, such as for instance localising it or customising it in any ways. Your custom exception handler will be invoked with the following arguments.

  • [message] - The exception error message
  • [path] - The URL that triggered the exception
  • [field] - If the exception that was thrown declared a field, this argument will contain the name of the field
  • [status] - If the exception that was thrown declared a status code, this argument will contain the status code
  • [public] - If the exception that was thrown wants to propagate to the client this will be true

You can return a "transformed" exception from your exception handler, returning the following arguments, that will end up becoming the response object returned to the client.

  • [message] - Message to return as JSON to client
  • [field] - Field to return as JSON to client
  • [status] - Status code to decorate your HTTP response with

The default exception handler can be found in "/files/exceptions.hl", which will be invoked if no custom exception handler is declared further down in your folder hierarchy.

Magic's GitHub project page

Magic is 100% Open Source and you can find the primary project GitHub page here.

Project website for magic.lambda.library

The source code for this repository can be found at github.com/polterguy/magic.library, and you can provide feedback, provide bug reports, etc at the same place.

  • Build status
  • Quality Gate Status
  • Bugs
  • Code Smells
  • Duplicated Lines (%)
  • Lines of Code
  • Maintainability Rating
  • Reliability Rating
  • Security Rating
  • Technical Debt
  • Vulnerabilities

The projects is copyright Thomas Hansen 2023 - 2024, and professionally maintained by AINIRO.IO.

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

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
17.3.9 1,475 2/17/2024
17.3.7 265 2/12/2024
17.3.6 247 2/12/2024
17.3.5 238 2/10/2024
17.3.4 215 2/9/2024
17.3.3 227 2/8/2024
17.3.2 242 2/2/2024
17.3.1 263 1/30/2024
17.2.2 239 1/30/2024
17.2.1 250 1/22/2024
17.2.0 225 1/22/2024
17.1.7 294 1/12/2024
17.1.6 257 1/11/2024
17.1.5 278 1/5/2024
17.0.1 343 1/1/2024
17.0.0 464 12/14/2023
16.11.6 324 11/14/2023
16.11.5 288 11/12/2023
16.9.0 411 10/9/2023
16.8.5 268 9/30/2023
16.8.4 267 9/25/2023
16.8.0 234 9/24/2023
16.7.51 218 9/24/2023
16.7.50 253 9/23/2023
16.7.1 310 9/4/2023
16.7.0 423 7/11/2023
16.6.13 292 7/6/2023
16.6.12 313 7/5/2023
16.6.11 310 7/5/2023
16.6.5 372 7/3/2023
16.4.4 345 7/2/2023
16.4.3 318 6/27/2023
16.4.2 351 6/25/2023
16.4.1 348 6/25/2023
16.4.0 340 6/22/2023
16.3.2 436 6/7/2023
16.3.0 462 5/28/2023
16.2.0 554 5/13/2023
16.1.10 475 5/1/2023
16.1.9 444 4/30/2023
16.1.1 449 4/20/2023
15.10.11 486 4/16/2023
15.9.40 484 4/3/2023
15.9.1 565 3/27/2023
15.9.0 568 3/24/2023
15.8.2 606 3/20/2023
15.7.0 501 3/6/2023
15.5.20 829 2/23/2023
15.5.13 656 2/13/2023
15.5.9 546 2/11/2023
15.5.2 644 2/5/2023
15.5.1 569 2/3/2023
15.5.0 613 1/28/2023
15.2.0 747 1/18/2023
15.1.0 1,267 12/28/2022
14.5.7 789 12/13/2022
14.5.5 886 12/6/2022
14.5.1 706 11/23/2022
14.5.0 661 11/18/2022
14.4.5 719 10/22/2022
14.4.2 678 10/22/2022
14.4.1 677 10/22/2022
14.4.0 705 10/17/2022
14.3.9 718 10/13/2022
14.3.6 714 10/7/2022
14.3.2 745 9/18/2022
14.3.1 821 9/12/2022
14.3.0 760 9/10/2022
14.1.3 986 8/7/2022
14.1.2 720 8/7/2022
14.1.1 755 8/7/2022
14.0.14 726 7/26/2022
14.0.12 708 7/24/2022
14.0.11 680 7/23/2022
14.0.10 713 7/23/2022
14.0.9 722 7/23/2022
14.0.8 787 7/17/2022
14.0.5 873 7/11/2022
14.0.4 767 7/7/2022
14.0.3 762 7/2/2022
14.0.2 732 7/2/2022
14.0.1 780 7/2/2022
14.0.0 764 6/25/2022
13.4.28 753 6/11/2022
13.4.25 847 6/9/2022
13.4.24 749 6/9/2022
13.4.19 802 6/8/2022
13.4.3 785 6/6/2022
13.4.2 821 6/4/2022
13.4.0 848 5/31/2022
13.3.8 791 5/19/2022
13.3.7 777 5/18/2022
13.3.6 796 5/14/2022
13.3.4 874 5/9/2022
13.3.1 812 5/1/2022
13.3.0 811 5/1/2022
13.2.2 848 4/25/2022
13.2.1 782 4/25/2022
13.2.0 808 4/21/2022
13.1.1 843 4/20/2022
13.1.0 957 4/7/2022
13.0.0 826 4/5/2022
12.0.3 1,038 3/14/2022
11.0.7 881 3/11/2022
11.0.5 961 3/2/2022
11.0.4 876 2/22/2022
11.0.3 887 2/9/2022
11.0.2 943 2/6/2022
11.0.1 898 2/5/2022
10.0.21 904 1/28/2022
10.0.20 921 1/27/2022
10.0.19 867 1/23/2022
10.0.18 837 1/17/2022
10.0.17 853 1/14/2022
10.0.16 738 1/2/2022
10.0.15 781 12/31/2021
10.0.14 795 12/28/2021
10.0.13 867 12/23/2021
10.0.11 641 12/23/2021
10.0.10 662 12/22/2021
10.0.9 816 12/22/2021
10.0.8 717 12/22/2021
10.0.7 876 12/22/2021
10.0.6 751 12/19/2021
10.0.5 858 12/18/2021
10.0.3 630 12/16/2021
10.0.2 747 12/14/2021
10.0.1 596 12/13/2021
10.0.0 655 12/6/2021
9.9.9 1,438 11/29/2021
9.9.6 4,911 11/24/2021
9.9.5 644 11/23/2021
9.9.4 966 11/21/2021
9.9.3 724 11/9/2021
9.9.2 762 11/4/2021
9.9.0 843 10/30/2021
9.8.9 878 10/29/2021
9.8.7 726 10/27/2021
9.8.6 762 10/27/2021
9.8.5 844 10/26/2021
9.8.4 819 10/25/2021
9.8.3 874 10/24/2021
9.8.1 746 10/21/2021
9.8.0 831 10/20/2021
9.7.9 725 10/20/2021
9.7.8 805 10/19/2021
9.7.7 983 10/17/2021
9.7.6 903 10/17/2021
9.7.5 773 10/14/2021
9.7.1 707 10/14/2021
9.7.0 803 10/9/2021
9.6.8 786 8/30/2021
9.6.7 762 8/26/2021
9.6.6 867 8/14/2021
9.6.5 1,003 8/11/2021
9.6.4 804 8/10/2021
9.6.3 760 8/9/2021
9.6.2 786 8/8/2021
9.6.1 757 8/8/2021
9.5.9 950 8/5/2021
9.5.8 956 8/4/2021
9.5.3 797 7/20/2021
9.5.0 1,191 7/9/2021
9.4.5 829 6/29/2021
9.4.4 935 6/29/2021
9.4.0 759 6/24/2021
9.3.7 789 6/21/2021
9.3.6 843 6/21/2021
9.3.5 963 6/18/2021
9.3.4 891 6/18/2021
9.2.5 963 6/7/2021
9.2.4 878 6/6/2021
9.2.3 832 6/6/2021
9.2.2 737 6/4/2021
9.2.1 974 6/1/2021
9.2.0 921 5/26/2021
9.1.9 756 5/5/2021
9.1.8 914 5/5/2021
9.1.7 784 5/3/2021
9.1.4 774 4/21/2021
9.1.2 736 4/18/2021
9.1.1 748 4/15/2021
9.1.0 761 4/14/2021
9.0.1 839 4/12/2021
9.0.0 755 4/5/2021
8.9.92 1,335 3/30/2021
8.9.4 1,329 3/26/2021
8.9.3 1,402 3/19/2021
8.9.2 1,385 1/29/2021
8.9.1 1,412 1/24/2021
8.9.0 1,520 1/22/2021
8.7.1 1,805 11/15/2020
8.7.0 1,521 11/15/2020
8.6.9 1,460 11/8/2020
8.6.7 1,451 11/4/2020
8.6.6 1,528 11/2/2020
8.6.5 1,511 11/1/2020
8.6.3 1,535 10/30/2020
8.6.2 1,386 10/30/2020
8.6.1 1,526 10/29/2020
8.6.0 1,452 10/28/2020
8.5.1 1,483 10/26/2020
8.5.0 1,425 10/23/2020
8.4.6 1,637 10/20/2020
8.4.5 1,526 10/18/2020
8.4.4 1,502 10/17/2020
8.4.3 1,499 10/16/2020
8.4.2 1,492 10/16/2020
8.4.1 1,436 10/15/2020
8.4.0 1,550 10/13/2020
8.3.3 1,451 10/11/2020
8.3.2 1,491 10/8/2020
8.3.1 1,524 10/5/2020
8.3.0 1,468 10/3/2020
8.2.3 1,448 10/1/2020
8.2.2 1,675 9/26/2020
8.2.1 1,548 9/25/2020
8.2.0 1,600 9/25/2020
8.1.25 1,497 9/24/2020
8.1.24 1,470 9/23/2020
8.1.23 1,399 9/23/2020
8.1.22 1,451 9/21/2020
8.1.21 1,528 9/15/2020
8.1.20 1,557 9/14/2020
8.1.19 1,501 9/13/2020
8.1.18 1,481 9/13/2020
8.1.17 1,543 9/13/2020
8.1.16 1,527 9/13/2020
8.1.15 1,458 9/12/2020
8.1.13 1,358 9/11/2020
8.1.12 1,501 9/11/2020
8.1.11 1,495 9/11/2020
8.1.10 1,500 9/6/2020
8.1.9 1,514 9/3/2020
8.1.8 1,543 9/2/2020
8.1.7 1,437 8/28/2020
8.1.4 1,419 8/25/2020
8.1.3 1,594 8/18/2020
8.1.2 1,385 8/16/2020
8.1.1 1,465 8/15/2020
8.0.3 1,500 8/11/2020
8.0.2 1,520 8/7/2020
8.0.1 1,501 8/7/2020
8.0.0 1,425 8/7/2020
7.0.1 1,544 6/28/2020
7.0.0 1,554 6/28/2020
5.0.10 1,539 5/31/2020
5.0.9 1,653 5/30/2020
5.0.8 1,463 5/29/2020
5.0.7 1,508 5/29/2020
5.0.5 1,568 2/27/2020
5.0.4 1,508 2/26/2020
5.0.3 1,512 2/26/2020
5.0.2 1,501 2/25/2020
5.0.1 1,431 2/25/2020
5.0.0 1,560 2/25/2020
4.1.5 1,480 2/23/2020
4.1.4 1,578 2/23/2020
4.1.3 1,493 2/22/2020
4.1.2 1,511 2/22/2020
4.1.1 1,465 2/21/2020
4.1.0 1,528 2/21/2020
4.0.9 1,604 2/7/2020
4.0.8 1,428 2/7/2020
4.0.7 1,478 2/7/2020
4.0.5 1,502 1/28/2020
4.0.4 1,593 1/27/2020
4.0.3 1,461 1/27/2020
4.0.2 1,625 1/16/2020
4.0.1 1,618 1/11/2020
4.0.0 1,569 1/5/2020
3.1.7 1,626 12/17/2019
3.1.6 1,551 12/12/2019
3.1.5 1,536 12/12/2019
3.1.4 1,510 12/5/2019
3.1.3 1,564 12/4/2019
3.1.2 1,618 11/30/2019
3.1.1 1,731 11/26/2019
3.1.0 1,558 11/10/2019
3.0.4 1,391 11/1/2019
3.0.3 1,555 10/28/2019
3.0.2 1,574 10/28/2019
3.0.1 1,569 10/26/2019
3.0.0 1,394 10/23/2019
2.1.4 1,198 10/21/2019
2.1.3 1,522 10/21/2019
2.1.2 1,658 10/21/2019
2.1.1 1,541 10/19/2019
2.1.0 1,598 10/19/2019
2.0.9 1,285 10/18/2019
2.0.8 1,566 10/18/2019
2.0.7 1,315 10/18/2019
2.0.6 1,279 10/18/2019
2.0.5 1,324 10/18/2019
2.0.4 1,288 10/17/2019
2.0.3 1,420 10/16/2019
2.0.2 1,418 10/15/2019
2.0.1 1,450 10/14/2019
2.0.0 1,296 10/13/2019
1.1.7 1,649 10/11/2019
1.1.6 1,581 10/11/2019