IOC-инъекция IServerSideEvents - PullRequest
       8

IOC-инъекция IServerSideEvents

0 голосов
/ 28 января 2019

Я пишу юнит-тесты для своего МОК.Один из моих интерфейсов внедряет IServerEvents.

Я включаю события через:

  ServerEventsFeature serverEventsFeature = new ServerEventsFeature()
            {
                LimitToAuthenticatedUsers = false,
                NotifyChannelOfSubscriptions = false,
                OnConnect = (eventSubscription, dictionary) =>
                {
                },
                OnSubscribe = (eventSubscription) =>
                {
                }
            };

Однако container.Resolve выдает следующую ошибку при отладке (не с помощью модульных тестов):

'container.Resolve<IServerEvents>()' threw an exception of type 'System.Exception'
    Data: {System.Collections.ListDictionaryInternal}
    HResult: -2146233088
    HelpLink: null
    InnerException: {System.InvalidOperationException: No service for type 'ServiceStack.IServerEvents' has been registered.
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
   at Funq.Container.ResolveImpl[TService](String name, Boolean throwIfMissing)}
    Message: "Error trying to resolve Service 'ServiceStack.IServerEvents' or one of its autowired dependencies (see inner exception for details)."
    Source: "ServiceStack"
    StackTrace: "   at Funq.Container.ResolveImpl[TService](String name, Boolean throwIfMissing)"
    TargetSite: {TService ResolveImpl[TService](System.String, Boolean)}

Это делаетработать в обычном режиме, но ручное разрешение интерфейса не работает.

Что мне интересно, так это:

A) правильный способ для модульного тестирования этой интеграции событий сервера

B) Должен ли я просто насмехаться над IServerEvents на контейнере с помощью RegisterAs <> () в модульных тестах

C) Почему инъекция работает нормально, но container.Resolve () завершается неудачно.

Любые отзывы приветствуются.

1 Ответ

0 голосов
/ 28 января 2019

Вы не можете использовать ServerEventsFeature в модульном тесте, вы сможете использовать его только в интеграционном тесте .Вы можете найти некоторые рабочие примеры в ServerEventTests .

Поскольку ServerEventsFeature является плагином, он должен быть зарегистрирован как плагин для работы:

Plugins.Add(new ServerEventsFeature { ... });

, которыйкогда плагин зарегистрирован, зарегистрирует MemoryServerEvents зависимость :

container.Register<IServerEvents>(memoryServerEvents);
...