2021-06-01 17:41:07 +02:00
2021-06-01 16:47:24 +02:00
2020-11-12 13:03:54 +01:00
2021-03-26 12:13:50 +01:00
2021-06-01 16:28:34 +02:00
2020-11-12 13:03:56 +01:00

Slim

Service lifetime manager and dependency injection framework

Uses lazy approach and only implements objects when called.

Supports multiple Register calls without needing to rebuild.

Supports scoped lifetime of services.

To use, simply create and register types:

var serviceManager = new ServiceManager();
serviceManager.RegisterSingleton<IService1, Service1>();
serviceManager.RegisterSingleton<IService2, Service2>(sp => new Service2(sp.GetService<IService1>());
serviceManager.GetService<IService2>();

To manage the lifetime of the objects, use serviceManager.RegisterSingleton, serviceManager.RegisterTransient or serviceManager.RegisterScoped.

Can register a services for all interaces it implements:

serviceManager.RegisterSingleton<Service1>();
serviceManager.GetService<I1Service1>();
serviceManager.GetService<I2Service1>();

Supports both generics or arguments as types:

serviceManager.RegisterTransient<IService1, Service1>();
serviceManager.RegisterTransient(typeof(IService2), typeof(Service2));

Can register current service manager as a valid dependency:

serviceManager.RegisterServiceManager();

Can handle multiple types of exceptions:

serviceManager.HandleException<DependencyInjectionException>((sp, ex) => DoSomething1(ex));
serviceManager.HandleException<InvalidOperationException>((sp, ex) => DoSomething2(ex));
serviceManager.HandleException<Exception>((sp, ex) => DoSomething3(ex));

In case of reinitialization, call:

serviceManager.Clear();

serviceManager.Clear calls IDisposable.Dispose on singletons that implement IDisposable.

To build all singletons currently registered, call:

serviceManager.BuildSingletons();

IDependencyResolver interface to implement manual resolvers for special cases. Register on the IServiceManager using:

serviceManager.RegisterResolver(new SomeDependencyResolver());

To create a scope, call the following method and use the new instance of scoped IServiceProvider.

serviceManager.CreateScope();
S
Description
Service lifetime manager and dependency injection framework
Readme MIT 345 KiB
Languages
C# 100%