SwiftlyS2
Guides

Dependency Injection

Dependency Injection is a design pattern of C#.

When developing a SwiftlyS2 plugin, we strongly recommend you to use Dependency Injection to manage your plugin design.

Example

public override void Load(bool hotReload) {
  ServiceCollection services = new();

  services
    .AddSwiftly(Core)
    .AddSingleton<TestService>();


  var provider = services.BuildServiceProvider();

  provider.GetRequiredService<TestService>(); // This execute TestService constructor with dependencies it needs.
}

For TestService:

// TestService.cs
public class TestService {

  private ISwiftlyCore Core { get; init; }

  public TestService(ISwiftlyCore core, ILogger<TestService> logger, IOptionsMonitor<TestConfig> config) {
    Core = core;
    logger.LogInformation("TestService created");
    logger.LogInformation("Config: {Config}", config.CurrentValue.Age);

    core.Registrator.Register(this);
  }


  [Command("test")]
  public void TestCommand(ICommandContext context)
  {
    Core.NetMessage.Send<CUserMessageShake>(um => {
      um.Frequency = 1f;

      
      um.Recipients.AddAllPlayers();
    });
    context.Reply("Test command");
  }
}

Notice that ISwiftlyCore and ILogger<TestService> from core are injected through constructor.

For more information, please see MSLearn.

You will also need to add Microsoft.Extensions.DependencyInjection to your plugin.

On this page