Getting started

1. Install

dotnet add package yocto

yocto 3 targets .NET 10. Its only dependency is Microsoft.Extensions.DependencyInjection.Abstractions.

2. Register and resolve

using Yocto;

using var container = new Container();

container.Register<IAnimal, Dog>();                 // new instance per resolve (default)
container.RegisterSingleton<IClock, SystemClock>(); // one shared instance
container.Register<IPerson, Person>();              // Person(IAnimal pet) is constructor-injected

IPerson person = container.Resolve<IPerson>();
bool known = container.CanResolve<IPerson>();
if (container.TryResolve<IPerson>(out var maybe)) { /* ... */ }

yocto picks the public constructor with the most parameters it can satisfy. Parameters with default values are optional.

3. Choose a lifetime

container.Register<IRepository, SqlRepository>().AsScoped();   // one per container/scope
container.Register<IParser, Parser>().AsPerThread();            // one per thread
container.Register<IEncoder, Encoder>().AsPooled(poolSize: 4);  // round-robin pool
container.RegisterInstance<IConfig>(config);                    // yours; never disposed by yocto

See Lifetimes for details.

4. Validate at startup

container.Validate(); // throws AggregateException listing every broken registration

5. Use it in ASP.NET Core

var builder = WebApplication.CreateBuilder(args);
builder.Host.UseServiceProviderFactory(new YoctoServiceProviderFactory(validateOnBuild: true));
builder.Host.ConfigureContainer<IContainer>(c => c.RegisterPooled<IEncoder, Encoder>(poolSize: 8));

See ASP.NET Core and Generic Host.

6. Dispose

Disposing a container disposes its child containers and every IDisposable/IAsyncDisposable instance it created, newest first. Prefer await using when services implement IAsyncDisposable.

Next

Lifetimes · ASP.NET Core · All guides