CodeOfChaos.Extensions.DependencyInjection
0.41.1
Prefix Reserved
See the version list below for details.
dotnet add package CodeOfChaos.Extensions.DependencyInjection --version 0.41.1
NuGet\Install-Package CodeOfChaos.Extensions.DependencyInjection -Version 0.41.1
<PackageReference Include="CodeOfChaos.Extensions.DependencyInjection" Version="0.41.1" />
paket add CodeOfChaos.Extensions.DependencyInjection --version 0.41.1
#r "nuget: CodeOfChaos.Extensions.DependencyInjection, 0.41.1"
// Install CodeOfChaos.Extensions.DependencyInjection as a Cake Addin #addin nuget:?package=CodeOfChaos.Extensions.DependencyInjection&version=0.41.1 // Install CodeOfChaos.Extensions.DependencyInjection as a Cake Tool #tool nuget:?package=CodeOfChaos.Extensions.DependencyInjection&version=0.41.1
⛓️💥 CodeOfChaos.Extensions.DependencyInjection ⛓️💥
CodeOfChaos.Extensions.DependencyInjection is a library that provides tools for automizing dependency injection in .NET projects. It includes source generators for automatic registration of services and attributes to facilitate DI.
Features
- Automatic Service Registration: Use source generators to automatically register services in your project.
- Custom Attributes: Define custom attributes to specify the lifetime and other details for your services.
Getting Started
Prerequisites
- .NET 9.0 or later
Installation
You can install CodeOfChaos.Extensions.DependencyInjection
via NuGet Package Manager:
dotnet add package CodeOfChaos.Extensions.DependencyInjection
You can install CodeOfChaos.Extensions.DependencyInjection.Generator
via NuGet Package Manager:
dotnet add package CodeOfChaos.Extensions.DependencyInjection.Generator
Usage
Define Services with Attributes
You can use the provided attributes to define services:
InjectableService
: Simple attribute to register a class to the implementation which is inserted as a type generic.public interface IExampleService; [InjectableService<IExampleService>(ServiceLifetime.Singleton)] public class ExampleService : IExampleService { // ... }
FactoryCreatedService
: Marks the class as a service which creation depends on another injected service.- The factory service must implement
IFactoryService<>
public interface ICreatedService; [FactoryCreatedService<IExampleFactory, ICreatedService>(ServiceLifetime.Transient)] public class CreatedService : ICreatedService; // The above service is something that is created by the Factory service [InjectableService<IExampleFactory>(ServiceLifetime.Singleton)] public class ExampleFactory : IExampleFactory { public ICreatedService Create() => new CreatedService(); } public interface IExampleFactory : IFactoryService<ICreatedService>;
- The factory service must implement
PooledInjectableService
: Marks the class as a poolable service. This library creates a classAutoPoolableService
under which the class will be registered.- It uses
PooledInjectableServiceObjectPolicy
to create a policy. - The poolable service must implement
PooledInjectableServiceObjectPolicy
public interface IExamplePooled : IManualPoolable; [PooledInjectableService<IExamplePooled, ExamplePooled>] public class ExamplePooled : IExamplePooled { public bool Reset() => true; }
- It uses
Generate Service Registrations
The source generator will automatically create the necessary registration code. C
all the generated registration method in your Startup
or Program
class:
using Microsoft.Extensions.DependencyInjection;
var services = new ServiceCollection();
services.RegisterServicesFromYourAssemblyName();
Contributing
Contributions are welcome! Please fork this repository and submit a pull request.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net9.0 is compatible. 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. |
-
net9.0
- Microsoft.Extensions.DependencyInjection (>= 9.0.2)
- Microsoft.Extensions.ObjectPool (>= 9.0.2)
- System.Buffers (>= 4.6.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 |
---|---|---|
0.42.3 | 199 | 3/4/2025 |
0.42.3-preview.1 | 159 | 3/4/2025 |
0.41.2 | 191 | 3/4/2025 |
0.41.1 | 170 | 3/3/2025 |
0.41.0 | 102 | 2/26/2025 |
0.40.1 | 102 | 2/24/2025 |
0.40.0 | 83 | 2/24/2025 |
0.39.4 | 110 | 2/20/2025 |
0.39.3 | 89 | 2/20/2025 |
0.39.2 | 90 | 2/20/2025 |
0.39.1 | 83 | 2/20/2025 |
0.39.0 | 122 | 2/18/2025 |
0.37.2 | 125 | 2/16/2025 |
0.37.1 | 81 | 2/16/2025 |
0.36.4 | 126 | 2/14/2025 |
0.36.0 | 90 | 2/14/2025 |
0.35.0 | 87 | 2/8/2025 |
0.34.0 | 95 | 2/5/2025 |
0.33.0 | 82 | 2/5/2025 |
0.32.0 | 154 | 2/1/2025 |
0.31.0 | 92 | 1/29/2025 |
0.30.0 | 89 | 1/8/2025 |
0.2.0 | 111 | 10/31/2024 |
0.1.1 | 195 | 7/1/2024 |
0.1.0 | 196 | 6/7/2024 |