Dependapult 1.0.1
Simple dependency injection library for .NET 6

Simple dependency injection library for .NET 6

What is it?

It is a minimal dependency injection library to register all of your dependencies.

Features

  • Two object lifetimes: transient and singleton;
  • Convenient methods to register singleton or transient dependencies;
  • Transient dependency implementation can be replaced;
  • Singletons and the service itself uses lazy loading to save memory;

Usage

Doxygen documentation

Here are some typical scenarios when using Dependapult to show the useage of the service.

Getting Dependapult service object

DependapultService service = DependapultService.Instance;

Registering a dependency without providing arguments

// Manually provide lifetime
service.RegisterDependency<IDependency, Dependency>(DependencyLifetime.Singleton);
// Singleton convenience method
service.RegisterSingleton<IDependency, Dependency>();
// Transient convenience method
service.RegisterTransient<IDependency, Dependency>();
DependencyLifetime
Lifetime of a dependency object.
Definition: DependencyLifetime.cs:10

Registering a dependency and providing arguments

object[] arguments = new object[] { "config", 150, false };
// Manually provide lifetime
service.RegisterDependency<IDependency, Dependency>(DependencyLifetime.Singleton, arguments);
// Singleton convenience method
service.RegisterSingleton<IDependency, Dependency>(arguments);
// Transient convenience method
service.RegisterTransient<IDependency, Dependency>(arguments);

Registering a dependency and providing a creator function

// Manually provide lifetime
service.RegisterDependency<IDependency>(DependencyLifetime.Singleton, s => new Dependency(s.GetDependency<IOtherDependency>(), 200));
// Singleton convenience method
service.RegisterSingleton<IDependency>(s => new Dependency(s.GetDependency<IOtherDependency>(), 200));
// Transient convenience method
service.RegisterTransient<IDependency>(s => new Dependency(s.GetDependency<IOtherDependency>(), 200));

Replacing a dependency

// Manually provide lifetime
service.RegisterDependency<IDependency, Dependency>(DependencyLifetime.Transient, true);
// Transient convenience method
service.RegisterTransient<IDependency, Dependency>(true);

Getting a dependency

// With generics
IDependency dependency = service.GetDependency<IDependency>();
// Without generics
IDependency dependency = service.GetDependency(typeof(IDependency)) as IDependency;

Tagging a constructor

If your dependency contains multiple public constructor you must add a DependapultConstructor attribute to the constructor you want to be used by the service.

class Dependency
{
public Dependency()
{
...
}
[DependapultConstructor]
public Dependency(IOtherDependency otherDependency)
{
...
}
}