Мой делегат никогда не запускается в ядре .net - PullRequest
1 голос
/ 05 марта 2019

Я создал 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 секунд, есть ли в коллекции новый элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...