Canister.IoC 5.1.3

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

// Install Canister.IoC as a Cake Tool
#tool nuget:?package=Canister.IoC&version=5.1.3                

Canister

.NET Publish

Canister is one of the easiest ways to get IoC configuration under control. No longer do you have to search for that one class that you forgot to register. Instead use Canister to handle discovery and registration for you using a simple interface.

Basic Usage

The system has a fairly simple interface and only a couple of functions that need explaining. The first is setup:

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddCanisterModules();
}

AddCanisterModules will automatically scan assemblies for modules and load them accordingly. Or if you're doing a desktop app:

var Services = new ServiceCollection().AddCanisterModules();

Note that if you like, you can control which assemblies are searched:

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddCanisterModules(configure => configure.AddAssembly(typeof(Startup).Assembly));
}

It's recommended that you do this for security reasons as the default will search all assemblies found in the entry assembly's top level directory.

Modules

Canister uses the concept of modules to wire things up. This allows you to place registration code in libraries that your system is using instead of worrying about it in every application. Simply add your library and Canister will automatically wire it up for you. In order to do this, under Canister.Interfaces there is the IModule interface. This interface, when implemented, has two items in it. The first is a property called Order. This determines the order that the modules are loaded in. The second is a function called Load:

public class TestModule : IModule
{
    public int Order => 1;

    public void Load(IServiceCollection bootstrapper)
    {
	    bootstrapper.AddAllTransient<IMyInterface>();
		bootstrapper.AddTransient<MyType>();
    }
}

The module above is loaded automatically by the system and will have the Load function called at initialization time. At this point you should be able to resolve and register classes using the bootstrapper parameter. The service collection also has a couple of extra extension methods: AddAllTransient, AddAllScoped, AddAllSingleton:

bootstrapper.AddAllTransient<IMyInterface>();

The AddAllxxxx functions will find everything that implements a class or interface in the Assemblies that you tell it to look in and will register them with the service collection.

Working With Other IoC Containers

While the library assumes you are using the built in ServiceCollection, it is possible to work with IoC containers. All that is required is that it implements the IServiceCollection interface.

Using Canister in Your library

If you wish to use Canister in your library it is recommended that you build an extension method off of the ICanisterConfiguration interface that will allow you to register your needed assemblies for the user to make the experience a bit simpler when they want to control configuration themselves.

Installation

The library is available via Nuget with the package name "Canister.IoC". To install it run the following command in the Package Manager Console:

Install-Package Canister.IoC

Build Process

In order to build the library you may require the following:

  1. Visual Studio 2022

Other than that, just clone the project and you should be able to load the solution and build without too much effort.

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 was computed.  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 (9)

Showing the top 5 NuGet packages that depend on Canister.IoC:

Package Downloads
Aspectus

Aspectus is an advanced Aspect-Oriented Programming (AOP) library that simplifies the injection of cross-cutting concerns into your codebase. It empowers you to write clean and maintainable code by separating cross-cutting concerns from the core logic of your application.

ObjectCartographer

ObjectCartographer is a high-performance, convention-based C# object-to-object mapping library designed to simplify the process of copying data between objects. It eliminates the tedious task of manually writing code for data copying by providing a developer-friendly approach.

SerialBox

SerialBox is a simple serialization wrapper. It acts as a wrapper around various serialization libraries, thus giving them a common interface to deal with.

SimpleHtmlToPdf

.Net wrapper of wkhtmltopdf library to convert HTML pages to PDF.

FileCurator.Windows

FileCurator.Windows is a set of formats that are only available using the full version of the .Net framework. If an alternative is built in .Net Standard these will be replaced. So consider this a hold over.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
6.0.1 278 11/18/2024
6.0.0 69 11/18/2024
5.4.3 402 11/14/2024
5.4.2 67 11/14/2024
5.4.1 67 11/14/2024
5.4.0 65 11/14/2024
5.3.18 1,344 11/11/2024
5.3.17 2,332 11/4/2024
5.3.16 1,945 10/29/2024
5.3.15 2,599 10/14/2024
5.3.14 2,967 10/9/2024
5.3.13 10,835 8/22/2024
5.3.12 5,734 8/1/2024
5.3.11 6,548 6/24/2024
5.3.10 33,096 6/17/2024
5.3.9 9,974 5/6/2024
5.3.8 2,337 5/1/2024
5.3.7 1,865 4/30/2024
5.3.6 7,163 3/27/2024
5.3.5 3,503 3/14/2024
5.3.4 1,201 3/13/2024
5.3.3 2,936 3/4/2024
5.3.2 5,472 2/26/2024
5.3.1 3,406 2/21/2024
5.3.0 1,904 2/19/2024
5.2.4 6,066 2/2/2024
5.2.3 7,004 1/29/2024
5.2.2 4,750 1/19/2024
5.2.1 9,590 12/11/2023
5.2.0 437 12/10/2023
5.1.17 5,762 11/17/2023
5.1.16 2,118 11/16/2023
5.1.15 3,927 11/6/2023
5.1.14 3,247 10/30/2023
5.1.13 6,677 9/18/2023
5.1.12 4,027 9/11/2023
5.1.11 3,450 9/5/2023
5.1.10 1,931 9/4/2023
5.1.9 2,904 8/31/2023
5.1.8 2,260 8/30/2023
5.1.7 1,906 8/29/2023
5.1.6 8,129 8/8/2023
5.1.5 2,044 8/7/2023
5.1.4 6,652 7/13/2023
5.1.3 1,590 7/12/2023
5.1.2 1,870 7/10/2023
5.1.1 2,352 7/7/2023
5.1.0 566 7/7/2023
5.0.1 8,547 12/10/2022
5.0.0 697 12/10/2022
4.0.14 2,438 8/16/2022
4.0.13 826 8/16/2022
4.0.12 831 8/16/2022
4.0.11 13,197 3/22/2022
4.0.6 13,849 1/11/2022
4.0.5 724 1/11/2022
4.0.3 5,763 8/24/2021
4.0.2 11,444 6/15/2021
4.0.1 11,290 4/30/2021
4.0.0 14,097 1/6/2021
3.0.7 6,645 11/16/2020
3.0.4 8,580 9/13/2020
3.0.3 28,714 3/29/2020
3.0.2 34,192 2/16/2020
3.0.1 2,461 12/27/2019
3.0.0 10,714 11/23/2019
2.1.6 1,838 6/19/2019
2.1.5 8,870 4/16/2019
2.1.4 1,112 4/16/2019
2.1.3 9,304 2/21/2019
2.1.2 20,912 5/31/2018
2.1.1 6,931 5/31/2018
2.0.3 2,866 5/22/2018
2.0.2 5,022 5/21/2018
2.0.1 8,739 2/2/2018
2.0.0 10,607 1/2/2018
1.0.50 16,449 9/29/2017
1.0.49 28,381 8/24/2017
1.0.46 22,641 6/8/2017
1.0.45 1,433 6/8/2017
1.0.44 1,456 6/8/2017
1.0.43 1,401 6/8/2017
1.0.42 26,706 5/17/2017
1.0.41 9,745 3/22/2017
1.0.40 1,407 3/22/2017
1.0.35 7,494 1/23/2017
1.0.34 1,477 1/23/2017
1.0.33 1,732 1/18/2017
1.0.32 1,451 12/9/2016
1.0.31 6,013 12/9/2016
1.0.30 1,451 12/9/2016
1.0.26 5,692 11/18/2016
1.0.23 1,402 11/18/2016
1.0.21 1,472 11/18/2016
1.0.20 1,497 11/18/2016
1.0.19 2,208 10/28/2016
1.0.18 1,460 10/28/2016
1.0.17 1,463 10/28/2016
1.0.16 1,498 10/28/2016
1.0.15 1,445 10/28/2016
1.0.0 1,537 10/28/2016