【问题标题】:IOC injection of IServerSideEventsIServerSideEvents 的 IOC 注入
【发布时间】:2019-01-28 16:32:15
【问题描述】:

我正在为我的 IOC 编写单元测试。 我的一个接口注入了 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) 我是否应该只在单元测试中使用 RegisterAs() 模拟容器上的 IServerEvents

C) 为什么注入工作正常但 container.Resolve() 失败。

感谢任何反馈。

【问题讨论】:

    标签: c# unit-testing servicestack xunit


    【解决方案1】:

    您不能在单元测试中使用ServerEventsFeature,您只能在integration test 中使用它。您可以在ServerEventTests 中找到一些工作示例。

    由于ServerEventsFeature是插件,所以需要注册为插件才能运行:

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

    插件注册时会register the MemoryServerEvents dependency:

    container.Register<IServerEvents>(memoryServerEvents);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多