RSCG – BunnyTailServiceRegistration

 
 

name BunnyTailServiceRegistration
nuget https://www.nuget.org/packages/BunnyTail.ServiceRegistration/
link https://github.com/usausa/service-registration-generator
author Machi Pon

Generating service registration code from attributes

 

This is how you can use BunnyTailServiceRegistration .

The code that you start with is


<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>


The code that you will use is


using BunnyTail.ServiceRegistration;
using Microsoft.Extensions.DependencyInjection;

internal static partial class ServiceCollectionExtensions
{
    [ServiceRegistration(Lifetime.Scoped, "Database")]
    public static partial IServiceCollection AddDatabaseServices(this IServiceCollection services);
}


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();


namespace InjectDemo
{
    internal interface IDatabase
    {
        public void Open();
    }
}


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();
    }

}





namespace InjectDemo;
public partial class DatabaseCon:IDatabase
{
    public string? Connection { get; set; }
    public void Open()
    {
        Console.WriteLine("open from database con" );
    }
}



 

The code that is generated is

// <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;
    }
}

Code and pdf at

https://ignatandrei.github.io/RSCG_Examples/v2/docs/BunnyTailServiceRegistration


Posted

in

, ,

by

Tags: