Mal.SourceGeneratedDI 2.0.0-pre.3

This is a prerelease version of Mal.SourceGeneratedDI.
There is a newer version of this package available.
See the version list below for details.
dotnet add package Mal.SourceGeneratedDI --version 2.0.0-pre.3
                    
NuGet\Install-Package Mal.SourceGeneratedDI -Version 2.0.0-pre.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="Mal.SourceGeneratedDI" Version="2.0.0-pre.3">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Mal.SourceGeneratedDI" Version="2.0.0-pre.3" />
                    
Directory.Packages.props
<PackageReference Include="Mal.SourceGeneratedDI">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Mal.SourceGeneratedDI --version 2.0.0-pre.3
                    
#r "nuget: Mal.SourceGeneratedDI, 2.0.0-pre.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.
#:package Mal.SourceGeneratedDI@2.0.0-pre.3
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Mal.SourceGeneratedDI&version=2.0.0-pre.3&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Mal.SourceGeneratedDI&version=2.0.0-pre.3&prerelease
                    
Install as a Cake Tool

Mal.SourceGeneratedDI

Source-generated dependency injection with compile-time registrations and runtime composition.

Quick Start

Installation

dotnet add package Mal.SourceGeneratedDI

1. Declare services

using Mal.SourceGeneratedDI;

[Singleton]
public class DatabaseService { }

[Instance]
public class RequestHandler
{
    public RequestHandler(DatabaseService db) { }
}

2. Build and resolve

var container = new DependencyContainerBuilder()
    .AddRegistry(new MyAppGeneratedRegistry()) // auto-generated
    .Build();

var handler = container.Resolve<RequestHandler>();

Migrating from V1

V1 used direct container construction. V2 uses registry-based composition for cross-assembly support.

Before (v1)

var container = new DependencyContainer();
var service = container.Resolve<MyService>();

After (v2)

var container = new DependencyContainerBuilder()
    .AddRegistry(new MyAppGeneratedRegistry())
    .Build();
    
var service = container.Resolve<MyService>();

Key changes:

  • Use DependencyContainerBuilder with registries instead of direct container construction
  • Manual factories: add via builder or generated registry partial hooks

Features

Lifetime Attributes

  • [Singleton] - one instance per container
  • [Instance] - new instance per resolution

Advanced Features

  • Constructor injection with automatic dependency resolution
  • Lazy<T> constructor dependencies
  • Generic service mapping attributes
  • Assembly-level registration attributes
  • Circular dependency detection with dependency chain output
  • Cross-assembly composition

Configuration

Cross-Assembly Composition

var builder = new DependencyContainerBuilder()
    .AddRegistry(new CoreLibGeneratedRegistry())
    .AddRegistry(new FeatureLibGeneratedRegistry());
var container = builder.Build();

Manual Registrations (Host-Level)

var container = DependencyContainer.Create(builder =>
{
    builder.AddRegistry(new MyAppGeneratedRegistry());
    builder.Register<IClock>(() => new UtcClock());
});

Manual Registrations (Assembly-Level)

namespace Mal.SourceGeneratedDI;

public sealed partial class MyAppGeneratedRegistry
{
    static partial void AddManualFactories(IServiceRegistry registry)
    {
        registry.AddSingleton(typeof(IClock), _ => new UtcClock());
    }
}

Fallback Provider

var container = new DependencyContainerBuilder()
    .AddRegistry(new MyAppGeneratedRegistry())
    .UseFallback(serviceProvider)
    .Build();

Duplicate Registration Strategy

  • Throw (default)
  • FirstWins
  • LastWins

Packages

  • Mal.SourceGeneratedDI - source generator and analyzers
  • Mal.SourceGeneratedDI.Abstractions - runtime attributes, contracts, builder, and container

Requirements

.NET Standard 2.0+ target support

License

MIT

There are no supported framework assets in this package.

Learn more about Target Frameworks and .NET Standard.

  • .NETStandard 2.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2.0.2 99 3/15/2026
2.0.2-pre.1 73 3/3/2026
2.0.1-pre.1 53 2/10/2026
2.0.0-pre.4 49 2/10/2026
2.0.0-pre.3 51 2/10/2026
2.0.0-pre.2 57 2/10/2026
2.0.0-pre.1 46 2/10/2026
1.0.0 160 2/6/2026
1.0.0-beta.1 54 2/6/2026

v2.0.0-pre.3
  - Another attempt at fixing the Abstractions package flow as an automatic dependency.

v2.0.0-pre.2
  - Fixed: Abstractions package now properly flows as automatic dependency

v2.0.0-pre.1
  - Breaking: switched from generated per-assembly container bodies to generated registration sources.
  - Breaking: source-generated registrations now compose through `IRegistrationSource` and `DependencyContainerBuilder`.
  - Breaking: runtime attributes/contracts moved to `Mal.SourceGeneratedDI.Abstractions`.
  - Added generated `<AssemblyName>GeneratedRegistry` and `<AssemblyName>GeneratedContainerFactory`.
  - Added generated partial hook for advanced assembly-level manual factories.
  - Improved cross-assembly composition support by default.