BunnyTailServiceRegistration by Machi Pon
Nuget / site data
Details
Info
Name: BunnyTailServiceRegistration
Service registration source generator.
Author: Machi Pon
NuGet: https://www.nuget.org/packages/BunnyTail.ServiceRegistration/
You can find more details at https://github.com/usausa/service-registration-generator
Source : https://github.com/usausa/service-registration-generator
Original Readme
BunnyTail.ServiceRegistrationGenerator
Package | Info |
---|---|
BunnyTail.ServiceRegistration |
What is this?
Service registory method generator.
Usage
using BunnyTail.ServiceRegistration;
using Microsoft.Extensions.DependencyInjection;
internal static class Program
{
public static void Main()
{
using var provider = new ServiceCollection()
.AddServices()
.BuildServiceProvider();
var service = provider.GetRequiredService<TestService>();
}
}
internal static partial class ServiceCollectionExtensions
{
[ServiceRegistration(Lifetime.Singleton, "Service$")]
public static partial IServiceCollection AddServices(this IServiceCollection services);
}
internal sealed class TestService
{
}
About
Generating service registration code from attributes
How to use
Example ( source csproj, source files )
- CSharp Project
- ServiceCollectionExtensions.cs
- Program.cs
- IDatabase.cs
- Database.cs
- DatabaseCon.cs
This is the CSharp Project that references BunnyTailServiceRegistration
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<PropertyGroup>
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
<CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="BunnyTail.ServiceRegistration" Version="1.7.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.2" />
</ItemGroup>
</Project>
This is the use of BunnyTailServiceRegistration in ServiceCollectionExtensions.cs
using BunnyTail.ServiceRegistration;
using Microsoft.Extensions.DependencyInjection;
internal static partial class ServiceCollectionExtensions
{
[ServiceRegistration(Lifetime.Scoped, "Database")]
public static partial IServiceCollection AddDatabaseServices(this IServiceCollection services);
}
This is the use of BunnyTailServiceRegistration in Program.cs
using InjectDemo;
using Microsoft.Extensions.DependencyInjection;
var serviceCollection = new ServiceCollection();
serviceCollection.AddDatabaseServices();
var provider = serviceCollection.BuildServiceProvider();
var service = provider.GetService<Database>();
if(service == null)
throw new Exception("Service not found");
else
service.Open();
This is the use of BunnyTailServiceRegistration in IDatabase.cs
namespace InjectDemo
{
internal interface IDatabase
{
public void Open();
}
}
This is the use of BunnyTailServiceRegistration in Database.cs
namespace InjectDemo;
partial class Database
{
private readonly IDatabase con;
public Database(IDatabase con)
{
this.con = con;
}
public void Open()
{
Console.WriteLine($"open from database");
con.Open();
}
}
This is the use of BunnyTailServiceRegistration in DatabaseCon.cs
namespace InjectDemo;
public partial class DatabaseCon:IDatabase
{
public string? Connection { get; set; }
public void Open()
{
Console.WriteLine("open from database con" );
}
}
Generated Files
Those are taken from $(BaseIntermediateOutputPath)\GX
- ServiceCollectionExtensions.g.cs
// <auto-generated />
#nullable enable
using Microsoft.Extensions.DependencyInjection;
partial class ServiceCollectionExtensions
{
public static partial global::Microsoft.Extensions.DependencyInjection.IServiceCollection AddDatabaseServices(this global::Microsoft.Extensions.DependencyInjection.IServiceCollection services)
{
services.AddScoped<global::InjectDemo.Database>();
services.AddScoped<global::InjectDemo.IDatabase, global::InjectDemo.DatabaseCon>();
return services;
}
}
Usefull
Download Example (.NET C# )
Share BunnyTailServiceRegistration
https://ignatandrei.github.io/RSCG_Examples/v2/docs/BunnyTailServiceRegistration