Инъекция зависимости Microsoft и контравариантность - PullRequest
0 голосов
/ 28 февраля 2019

Я портирую библиотеку на сетевое ядро.Теперь у нас есть встроенный DI, и я хочу использовать его как можно лучше.

Моя библиотека передает события от сервера до клиентов-сигнализаторов, она содержит структуру для проверки события перед его отправкой конкретному клиенту.Моя старая библиотека поддерживала противоречивость, поэтому один обработчик событий может поддерживать все события, если вы хотите.Считайте, что это

public class ContravariantHandler : IEventHandler<BaseEvent>
{
    public void Handle(BaseEvent message)
    {

    }
}

public abstract class BaseEvent { }

public class MyEvent : BaseEvent { }
public class MyEvent2 : BaseEvent { }

public interface IEventHandler<in T>
{
    void Handle(T message);
}

Выполнение new ContravariantHandler().Handle(new MyEvent()); и new ContravariantHandler().Handle(new MyEvent2()); здесь хорошо.

Могу ли я получить, что DI ядра ядра для обработки будет правильным типом здесь?

это не работает,

var provider = new ServiceCollection()
    .AddTransient<IEventHandler<BaseEvent>, ContravariantHandler>()
    .BuildServiceProvider();

var contravariance =  provider.GetService<IEventHandler<MyEvent>>();
...