【问题标题】:Manually dispose OWIN WebApp手动处置 OWIN WebApp
【发布时间】:2015-07-31 16:34:09
【问题描述】:

我在运行测试时尝试使用 OWIN 来自托管 Web API,我想在 BeforeEach 中启动它并在 AfterEach 方法中停止。

我发现的所有示例都建议使用 using 关键字,例如

using (WebApp.Start<Startup>(url: baseAddress)) 
{ 
   ...
} 

但在我的情况下它没有帮助。

我试着这样做:

private IDisposable _webApp;

public override void BeforeEach()
{
    _webApp = WebApp.Start<OwinStartup>("http://localhost:99999/");
}

public override void AfterEach()
{
    base.AfterEach();

    if (_webApp != null)
        _webApp.Dispose();
}

但由于某种原因,它调用了UnityResolver 类的Dispose 方法,然后我得到stackoverflow... 异常。

应该如何正确处置OWIN主机?

【问题讨论】:

  • “在我的情况下它没有帮助”是什么意思?
  • @DavidL 我的意思是,如果我将 using 块放入 BeforeEach 方法中,它将不起作用。我猜,在运行每个测试之前,它会启动主机并立即停止它。我想在AfterEach 方法中停止它。
  • 你能发布OwinStartup类的代码吗?问题可能就在那里,因为您的实现看起来不错。
  • @drax 我遇到了类似的问题。你这是什么原因造成的?

标签: c# asp.net-web-api unity-container asp.net-web-api2 owin


【解决方案1】:

正如@drax 在 cmets 中所述 - 我的 dispose 实现是正确

问题在于我在 UnityResolver 类中的内部实现,它是在 OwinStartup 类中启动的。

但是,我遇到了一些与使用 Owin 的 OAuth 授权服务器相关的其他限制,因此我决定不要过度复杂化我的代码并放弃 Owin 的东西。至少现在是这样。

【讨论】:

  • UnityResolver 内部实现是什么意思?我有一个类似的问题,这就是我问的原因。
  • @programmingheadaches 我的 UnityResolver 类有 Dispose 方法,里面有一些逻辑,这个方法被调用而不是我的 owin dispose 实现。
猜你喜欢
  • 2019-10-28
  • 2014-01-01
  • 2014-08-10
  • 1970-01-01
  • 1970-01-01
  • 2016-12-24
  • 2014-08-16
  • 2015-10-18
  • 1970-01-01
相关资源
最近更新 更多