Files
SPT-Server-Build/ModExamples/11RegisterClassesInDI/RegisterClassesInDI.cs
T

77 lines
2.2 KiB
C#

using Core.Models.External;
using Core.Models.Utils;
using SptCommon.Annotations;
namespace _11RegisterClassesInDI;
[Injectable]
public class Bundle : IPostDBLoadMod // Run after db has loaded
{
private readonly SingletonClassExample _singletonClassExample;
private readonly TransientClassExample _transientClassExample;
// We inject 2 classes (singleton and transient) we've made below
public Bundle(
SingletonClassExample singletonClassExample,
TransientClassExample transientClassExample)
{
_singletonClassExample = singletonClassExample;
_transientClassExample = transientClassExample;
}
public void PostDBLoad()
{
_singletonClassExample.IncrementCounterAndLog();
_singletonClassExample.IncrementCounterAndLog();
_singletonClassExample.IncrementCounterAndLog();
_transientClassExample.IncrementCounterAndLog();
_transientClassExample.IncrementCounterAndLog();
_transientClassExample.IncrementCounterAndLog();
}
}
// This class is registered as a singleton. This means ONE and only ONE instance
// of this class will ever exist.
[Injectable(InjectionType.Singleton)]
public class SingletonClassExample
{
private readonly ISptLogger<SingletonClassExample> _logger;
private int _counter;
public SingletonClassExample(
ISptLogger<SingletonClassExample> logger)
{
_logger = logger;
_counter = 0;
}
public void IncrementCounterAndLog()
{
_counter++;
_logger.Success($"{_counter}");
}
}
// This class is being registered as default or transient. This means that
// every time a class requests an instance of this type a new one will be created
[Injectable(InjectionType.Transient)] // [Injectable] is the same as doing this
public class TransientClassExample
{
private readonly ISptLogger<TransientClassExample> _logger;
private int _counter;
public TransientClassExample(
ISptLogger<TransientClassExample> logger)
{
_logger = logger;
_counter = 0;
}
public void IncrementCounterAndLog()
{
_counter++;
_logger.Success($"{_counter}");
}
}