RSCG – Injectio
| name | Injectio |
| nuget | https://www.nuget.org/packages/Injectio/ |
| link | https://github.com/loresoft/Injectio |
| author | LoreSoft |
Attributes to DI helper
This is how you can use Injectio .
The code that you start with is
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Injectio" Version="2.6.1" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="7.0.0" />
</ItemGroup>
<PropertyGroup>
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
<CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath>
</PropertyGroup>
</Project>
The code that you will use is
using InjectioDemo; using Microsoft.Extensions.DependencyInjection; Console.WriteLine("Hello,World!"); ServiceCollection sc = new(); sc.AddInjectioDemo(); var b = sc.BuildServiceProvider(); var con = b.GetRequiredService<DatabaseCon>(); var db = b.GetRequiredService<IDatabase>(); db.Open();
using Injectio.Attributes;
namespace InjectioDemo;
[RegisterScoped]
internal class Database : IDatabase
{
private readonly DatabaseCon con;
public Database(DatabaseCon con)
{
this.con = con;
}
public void Open()
{
Console.WriteLine($"open {con.Connection}");
}
}
namespace InjectioDemo
{
internal interface IDatabase
{
public void Open();
}
}
using Injectio.Attributes;
namespace InjectioDemo;
[RegisterSingleton]
internal class DatabaseCon
{
public string? Connection { get; set; }
}
The code that is generated is
// <auto-generated />
#nullable enable
namespace Microsoft.Extensions.DependencyInjection
{
/// <summary>
/// Extension methods for discovered service registrations
/// </summary>
[global::System.CodeDom.Compiler.GeneratedCode("Injectio.Generators","2.6.1.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.Diagnostics.DebuggerStepThroughAttribute]
public static class DiscoveredServicesExtensions
{
/// <summary>
/// Adds discovered services from InjectioDemo to the specified service collection
/// </summary>
/// <param name="serviceCollection">The service collection.</param>
/// <param name="tags">The service registration tags to include.</param>
/// <returns>The service collection</returns>
public static global::Microsoft.Extensions.DependencyInjection.IServiceCollection AddInjectioDemo(this global::Microsoft.Extensions.DependencyInjection.IServiceCollection serviceCollection,params string[]? tags)
{
var tagSet = new global::System.Collections.Generic.HashSet<string>(tags ?? global::System.Linq.Enumerable.Empty<string>());
global::Microsoft.Extensions.DependencyInjection.Extensions.ServiceCollectionDescriptorExtensions.TryAdd(
serviceCollection,
global::Microsoft.Extensions.DependencyInjection.ServiceDescriptor.Describe(
typeof(global::InjectioDemo.IDatabase),
typeof(global::InjectioDemo.Database),
global::Microsoft.Extensions.DependencyInjection.ServiceLifetime.Scoped
)
);
global::Microsoft.Extensions.DependencyInjection.Extensions.ServiceCollectionDescriptorExtensions.TryAdd(
serviceCollection,
global::Microsoft.Extensions.DependencyInjection.ServiceDescriptor.Describe(
typeof(global::InjectioDemo.Database),
typeof(global::InjectioDemo.Database),
global::Microsoft.Extensions.DependencyInjection.ServiceLifetime.Scoped
)
);
global::Microsoft.Extensions.DependencyInjection.Extensions.ServiceCollectionDescriptorExtensions.TryAdd(
serviceCollection,
global::Microsoft.Extensions.DependencyInjection.ServiceDescriptor.Describe(
typeof(global::InjectioDemo.DatabaseCon),
typeof(global::InjectioDemo.DatabaseCon),
global::Microsoft.Extensions.DependencyInjection.ServiceLifetime.Singleton
)
);
return serviceCollection;
}
}
}
Code and pdf at
https://ignatandrei.github.io/RSCG_Examples/v2/docs/Injectio
Leave a Reply