Я создал API в ядре .net с C #, который имеет коллекцию элементов.Эта коллекция имеет делегата, который запускается при добавлении нового элемента (работает).Проблема в том, что я не могу заставить его работать, пока я не подпишусь на делегата от контроллера.
Текущий сценарий:
[HttpPost("welcome")]
public IActionResult Welcome([FromBody] MyClient newClient)
{
ClientsDataStore.Current.clients.Push(newClient);
return Ok(newClient);
}
Я создал класс MyClass:
public class MyClass
{
ILogger<MyClass> logger;
public MyClass(ILogger<MyClass> logger)
{
this.logger = logger;
ClientsDataStore.Current.clients.ElementAdded += ListenClients;
}
public async void ListenClients(object sender, MyClient e)
{
logger.LogDebug($"New client added");
if (e.VirtualMachine)
{
await ProcessVMAsync(e);
}
else
{
await ProcessDesktopAsync(e);
}
}
}
Я пытался зарегистрировать класс в public void ConfigureServices (IServiceCollection services) примерно так:
services.AddTransient<MyClass>();
При таком сценарии делегат никогда не запускается, но если я использую:
[HttpPost("welcome")]
public IActionResult Welcome([FromBody] MyClient newClient)
{
ClientsDataStore.Current.clients.ElementAdded += ListenClients;
ClientsDataStore.Current.clients.Push(newClient);
return Ok(newClient);
}
Тогда событие инициируется.
Я хотел бы знать, чего мне здесь не хватает и как я могу это сделать.
ОБНОВЛЕНИЕ :
Я изменил подход решения,У меня будет фоновая служба, проверяющая каждые 10 секунд, есть ли в коллекции новый элемент.