Simplify.DI 4.2.1

.NET 5.0 .NET Core 3.1 .NET Standard 2.0 .NET Framework 4.5.2
Install-Package Simplify.DI -Version 4.2.1
dotnet add package Simplify.DI --version 4.2.1
<PackageReference Include="Simplify.DI" Version="4.2.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Simplify.DI --version 4.2.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Simplify.DI, 4.2.1"
#r directive can be used in F# Interactive, C# scripting and .NET Interactive. Copy this into the interactive tool or source code of the script to reference the package.
// Install Simplify.DI as a Cake Addin
#addin nuget:?package=Simplify.DI&version=4.2.1

// Install Simplify.DI as a Cake Tool
#tool nuget:?package=Simplify.DI&version=4.2.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

Simplify.DI Documentation

Decouples users and frameworks (that are based on Simplify.DI) from dependency on IOC containers. Instead of that, they will only depend on Simplify.DI interface.

Disciplines and unifies dependencies registration, verification and objects creation.

Provides DIContainer.Current ambient context as centralized IOC container. Provides unified Interface for creation IOC container providers (wrappers) for IOC container frameworks.

Using DIContainer.Current and respective container provider you can switch between any IOC container without rewriting your code. Also as a centralized IOC container you can use it for building, for example, some framework which needs to use constructor injection and at the same time use it by that framework user (example using it in framework: registration, resolving with lifetime scope).

Available at NuGet as binary package

By default DIContainer.Current initialized with DryIocDIProvider container provider (DryIOC).

Another container providers available:

Please create an issue, if you want another container provider.

Main IOC container interface is IDIContainerProvider

Examples

Entities

public interface IFoo
{
}

public class Foo : IFoo
{
    public Foo(IBar bar)
    {
    }
}

public class Foo2 : IFoo
{
    public Foo2(IBar bar, string someParameter)
    {
    }
}

public interface IBar
{
}

public class Bar : IBar
{
}

public class Bar2 : IBar
{
    public Bar2(string someParameter)
    {
    }
}

Registration

// Simple registration
DIContainer.Current.Register<IBar, Bar>()
    .Register<IFoo, Foo>();

// Registration with delegate
DIContainer.Current.Register<IBar>(p => new Bar2("test"));

// Registration with delegate and type resolve
DIContainer.Current.Register<IFoo>(p => new Foo2(p.Resolve<IBar>(), "test"));

Resolve

var myObj = DIContainer.Current.Resolve<IBar>();

Verification

Container verification is a process of building registered objects graph and checking what all required types are present in a container and there is no registrations lifetime mismatches

DIContainer.Current.Verify();

In case of any container mismatches an exception will be thrown, exact type of the exception and messages will depend on current container provider

Scopes

3 type of scopes available:

  • PerLifetimeScope (default scope) - only one instance of the same type will be created inside opened scope
  • Singleton - only one instance will be created per container
  • Transient - new instance will be created on every Resolve request

Using PerLifetimeScope scope

Lifetime scope registration
// Simple registration
DIContainer.Current.Register<IBar, Bar>(LifetimeType.PerLifetimeScope);

// Any dependency while registration with delegate should be resolved with delegate parameter `p`, it is current scope resolve provider.
DIContainer.Current.Register<IFoo>(p => new Foo2(p.Resolve<IBar>(), "Test"), LifetimeType.PerLifetimeScope);
Lifetime scope usage
// Note, what scope.Container actually it is the same container as DIContainer.Current, for example, if using SimpleInjector, but with DryIoc it will be child container.
using (var scope = DIContainer.Current.BeginLifetimeScope())
{
    var myObject = scope.Resolver.Resolve<IFoo>();
}

Registration specific to IOC container

You can use any IOC container to directly register types or perform specific actions, for example, with Simple Injector:

With direct container registration

var provider = new SimpleInjectorDIProvider();
DIContainer.Current = provider;

provider.Container.RegisterSingleton<IFoo>();
...

Standard registrations with SimpleInjector container verification example

var provider = new SimpleInjectorDIProvider();
DIContainer.Current = provider;

...
DIContainer.Current.Register<IBar, Bar>();
...

provider.Container.Verify();

Fluent interfaces example

public static class Program
{
    public static void Main(string[] args)
    {
        var provider = new DryIocDIProvider();

        provider.RegisterAll()
            .Verify();

        using var scope = provider.BeginLifetimeScope();

        scope.Resolver.Resolve<IMyService1>().DoWork();
    }

    private static IDIContainerProvider RegisterAll(this IDIContainerProvider provider)
    {
        provider.RegisterServicesGroup1()
            .RegisterServicesGroup2();

        return provider;
    }

    private static IDIRegistrator RegisterServicesGroup1(this IDIRegistrator registrator) =>
        registrator.Register<IMyService1, MyService1>()
            .Register<IMyService2>(r => new MyService2("string parameter example"))
            .Register<IMyService3>(r => new MyService3(r.Resolve<IMyService2>()));

    private static IDIRegistrator RegisterServicesGroup2(this IDIRegistrator registrator) =>
        registrator.Register<IMySettings, MySettings>(LifetimeType.Singleton)
            .Register<IUsersRepository, UsersRepository>()
            .Register<IGroupsRepository, GroupsRepository>();

}

Special integrations

Product Versions
.NET net5.0 net5.0-windows net6.0 net6.0-android net6.0-ios net6.0-maccatalyst net6.0-macos net6.0-tvos net6.0-windows
.NET Core netcoreapp2.0 netcoreapp2.1 netcoreapp2.2 netcoreapp3.0 netcoreapp3.1
.NET Standard netstandard2.0 netstandard2.1
.NET Framework net452 net46 net461 net462 net463 net47 net471 net472 net48
MonoAndroid monoandroid
MonoMac monomac
MonoTouch monotouch
Tizen tizen40 tizen60
Xamarin.iOS xamarinios
Xamarin.Mac xamarinmac
Xamarin.TVOS xamarintvos
Xamarin.WatchOS xamarinwatchos
Compatible target framework(s)
Additional computed target framework(s)
Learn more about Target Frameworks and .NET Standard.
  • .NETCoreApp 3.1

  • .NETFramework 4.5.2

  • .NETStandard 2.0

  • net5.0

NuGet packages (12)

Showing the top 5 NuGet packages that depend on Simplify.DI:

Package Downloads
AcspNet

ACSP.NET is a lightweight and fast .NET web-framework based on MVC and OWIN.

Simplify.Web

Lightweight and fast .NET web-framework based on MVC and OWIN

Simplify.WindowsServices

Windows services framework with DI

Simplify.DI.Provider.SimpleInjector

Simplify.DI SimpleInjector provider

Simplify.Repository.FluentNHibernate

Simplify.Repository FluentNHibernate implementation

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
4.2.1 125 5/11/2022
4.2.0 298 4/23/2022
4.1.7 260 3/27/2022
4.1.6 103 3/6/2022
4.1.5 482 1/10/2022
4.1.4 130 1/3/2022
4.1.3 1,369 11/3/2021
4.1.2 550 10/25/2021
4.1.1 346 10/15/2021
4.1.0 1,128 7/15/2021
4.0.20 476 7/5/2021
4.0.19 311 6/10/2021
4.0.18 292 5/29/2021
4.0.17 715 5/13/2021
4.0.16 892 4/22/2021
4.0.15 399 4/8/2021
4.0.15-pre01 141 4/8/2021
4.0.14 1,703 2/26/2021
4.0.13 453 2/12/2021
4.0.12 920 1/18/2021
4.0.11 240 1/13/2021
4.0.10 827 12/11/2020
4.0.9 429 12/10/2020
4.0.8 610 10/29/2020
4.0.7 1,306 8/26/2020
4.0.6 576 7/21/2020
4.0.5 455 7/7/2020
4.0.4 1,111 6/27/2020
4.0.3 1,211 4/28/2020
4.0.2 651 3/31/2020
4.0.1 959 1/26/2020
4.0.0 4,000 9/24/2019
3.0.0 1,014 8/30/2019
2.1.0 1,273 6/22/2019
2.0.1 1,700 11/14/2018
1.2.2 1,327 3/10/2018
1.2.1 1,924 8/14/2017
1.2.0 1,178 1/23/2017
1.1.2 3,548 8/18/2016
1.1.1 1,559 1/10/2016
1.1.0 1,149 11/23/2015
1.0.4 2,500 11/12/2014
1.0.3 6,078 10/23/2014
1.0.2 1,900 9/14/2014
1.0.1 2,111 8/19/2014
1.0.0 1,374 8/14/2014