Table of Contents

Generated registrations

Use SquidStd.Generators to replace repetitive manual registration calls with compile-time generated DryIoc extensions.

Add the generator

dotnet add package SquidStd.Generators

Standard services

using SquidStd.Abstractions.Attributes;
using SquidStd.Abstractions.Interfaces.Services;
using SquidStd.Generators.Services;

public interface IGreetingService : ISquidStdService { }

[RegisterStdService(typeof(IGreetingService), Priority = 10)]
public sealed class GreetingService : IGreetingService
{
    public ValueTask StartAsync(CancellationToken cancellationToken = default) => ValueTask.CompletedTask;

    public ValueTask StopAsync(CancellationToken cancellationToken = default) => ValueTask.CompletedTask;
}

container.RegisterGeneratedStdServices();

Config sections

using SquidStd.Abstractions.Attributes;
using SquidStd.Generators.Config;

[RegisterConfigSection("greeting", Priority = -10)]
public sealed class GreetingConfig
{
    public string Message { get; set; } = "hello";
}

container.RegisterGeneratedConfigSections();

Job handlers

using SquidStd.Generators.Workers;
using SquidStd.Workers.Abstractions.Data;
using SquidStd.Workers.Attributes;
using SquidStd.Workers.Interfaces;

[RegisterJobHandler]
public sealed class GreetingJobHandler : IJobHandler
{
    public string JobName => "greet";

    public Task HandleAsync(JobRequest job, CancellationToken cancellationToken)
    {
        Console.WriteLine(job.JobName);

        return Task.CompletedTask;
    }
}

container.RegisterGeneratedJobHandlers();

Lua script modules

using SquidStd.Generators.Scripting.Lua;
using SquidStd.Scripting.Lua.Attributes;
using SquidStd.Scripting.Lua.Attributes.Scripts;

[RegisterScriptModule]
[ScriptModule("greeting")]
public sealed class GreetingScriptModule { }

container.RegisterGeneratedScriptModules();

The Lua generator only emits RegisterScriptModule<T>(); [ScriptModule("name")] is still required because the Lua runtime uses it as the module name.