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