Mal.SourceGeneratedDI
2.0.0-pre.1
See the version list below for details.
dotnet add package Mal.SourceGeneratedDI --version 2.0.0-pre.1
NuGet\Install-Package Mal.SourceGeneratedDI -Version 2.0.0-pre.1
<PackageReference Include="Mal.SourceGeneratedDI" Version="2.0.0-pre.1"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
<PackageVersion Include="Mal.SourceGeneratedDI" Version="2.0.0-pre.1" />
<PackageReference Include="Mal.SourceGeneratedDI"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
paket add Mal.SourceGeneratedDI --version 2.0.0-pre.1
#r "nuget: Mal.SourceGeneratedDI, 2.0.0-pre.1"
#:package Mal.SourceGeneratedDI@2.0.0-pre.1
#addin nuget:?package=Mal.SourceGeneratedDI&version=2.0.0-pre.1&prerelease
#tool nuget:?package=Mal.SourceGeneratedDI&version=2.0.0-pre.1&prerelease
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
DependencyContainerBuilderwith 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)FirstWinsLastWins
Packages
Mal.SourceGeneratedDI- source generator and analyzersMal.SourceGeneratedDI.Abstractions- runtime attributes, contracts, builder, and container
Requirements
.NET Standard 2.0+ target support
License
MIT
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.0
- Mal.SourceGeneratedDI.Abstractions (>= 2.0.0)
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.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.