WhiteDependencyInjection 1.0.0
dotnet add package WhiteDependencyInjection --version 1.0.0
NuGet\Install-Package WhiteDependencyInjection -Version 1.0.0
<PackageReference Include="WhiteDependencyInjection" Version="1.0.0" />
<PackageVersion Include="WhiteDependencyInjection" Version="1.0.0" />
<PackageReference Include="WhiteDependencyInjection" />
paket add WhiteDependencyInjection --version 1.0.0
#r "nuget: WhiteDependencyInjection, 1.0.0"
#:package WhiteDependencyInjection@1.0.0
#addin nuget:?package=WhiteDependencyInjection&version=1.0.0
#tool nuget:?package=WhiteDependencyInjection&version=1.0.0
White Dependency Injection - Source Generator
Overview
White Dependency Injection is a Roslyn source generator that automatically generates a dependency injection container based on attributes you apply to your classes. It eliminates the need for manual service registration while providing compile-time safety and performance benefits.
Key Features
Attribute-based registration - Simply decorate your classes with service attributes
Compile-time DI container generation - No runtime reflection overhead
Three lifetimes supported:
Singleton
Transient
Scoped
Factory method support - Designate static factory methods for service creation
Interface-based - Clean contract with IServiceProvider and IServiceScope
IDisposable support - Automatic disposal of services
Installation
<PackageReference Include="WhiteDependencyInjection" Version="1.0.0" />
Usage
1. Decorate your usages
Use one of the provided attributes to register your services:
[SingletonService] // Basic singleton
public class MySingletonService { }
[SingletonService<IMyService>] // Singleton implementing interface
public class MyInterfaceService : IMyService { }
[TransientService] // Transient service
public class MyTransientService { }
[ScopedService] // Scoped service
public class MyScopedService { }
2.Use factory methods (optional)
For complex initialization, you can use a factory method:
[SingletonService]
public class ComplexService
{
[FactoryMethod]
public static ComplexService Create(IServiceProvider provider)
{
// Custom creation logic
}
}
3. Use the generated container
var services = new ServiceProvider();
// Get services
var singleton = services.GetRequiredService<MySingletonService>();
var scopedService = services.CreateScope().ServiceProvider.GetService<MyScopedService>();
Service Lifetimes
The source generator supports three service lifetimes:
| Attribute | Lifetime | Description |
|---|---|---|
| [SingletonService] | Singleton | One instance for the entire application |
| [SingletonService<T>] | Singleton | Singleton implementing interface T |
| [TransientService] | Transient | New instance each time requested |
| [TransientService<T>] | Transient | Transient implementing interface T |
| [ScopedService] | Scoped | One instance per scope |
| [ScopedService<T>] | Scoped | Scoped implementing interface T |
Advanced Features
- Generic services: Works with generic service types
- Constructor injection: Automatically injects dependencies into constructors
- Disposable support: Automatically disposes of services when the container is disposed
- Nullable reference types: Fully supports nullable reference types
Performance Benefits
Since everything is generated at compile time:
- No runtime reflection overhead
- No dynamic code generation
- Optimized service resolution
- Compile-time validation of service registrations
Limitations
- Requires C# 9.0 or later
- All services must be concrete classes
- Constructor parameters must be resolvable by the DI container
Example Project Structure
MyApp/
├── Services/
│ ├── MySingletonService.cs
│ ├── MyScopedService.cs
│ └── MyTransientService.cs
├── Program.cs
└── MyApp.csproj
The source generator will automatically create the ServiceProvider class and all necessary infrastructure code.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.CodeAnalysis.CSharp (>= 4.3.0)
- Microsoft.CodeAnalysis.CSharp.Workspaces (>= 4.3.0)
- WhiteDependencyInjection.BaseTypes (>= 1.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 |
|---|---|---|
| 1.0.0 | 213 | 5/6/2025 |