C# 在WebApp中手动处理OWS

C# 在WebApp中手动处理OWS,c#,asp.net-web-api,unity-container,asp.net-web-api2,owin,C#,Asp.net Web Api,Unity Container,Asp.net Web Api2,Owin,我正在尝试在运行测试时使用OWIN自托管Web API,我希望在每个方法之前的中启动它,并在每个方法之后的中停止 我发现的所有示例都建议使用和关键字,例如 using (WebApp.Start<Startup>(url: baseAddress)) { ... } 使用(WebApp.Start(url:baseAddress)) { ... } 但对我来说,这没用 我试着这样做: private IDisposable _webApp; public ove

我正在尝试在运行测试时使用OWIN自托管Web API,我希望在每个方法之前的
中启动它,并在每个方法之后的
中停止

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

using (WebApp.Start<Startup>(url: baseAddress)) 
{ 
   ...
} 
使用(WebApp.Start(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();
}
私有IDisposable_webApp;
public override void beforeach()
{
_webApp=webApp.Start(“http://localhost:99999/");
}
public override void AfterEach()
{
base.AfterEach();
如果(_webApp!=null)
_Dispose();
}
但出于某种原因,它调用
UnityResolver
类的
Dispose
方法,然后我得到
stackoverflow…
异常


我应该如何在主机中正确地处理OWIN?

正如@drax在评论中已经指出的那样-我的dispose实现是正确的

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


然而,我还面临着与Owin的OAuth授权服务器相关的一些其他限制,所以我决定不过度复杂我的代码并抛弃Owin的东西。至少现在是这样。

你所说的“在我的情况下它没有帮助”是什么意思?@DavidL我的意思是,如果我在每个
方法之前在
中使用
块,它将不起作用。我猜,在运行每个测试之前,它将启动主机并立即停止它。我想在每个
方法之后在
中停止它。您能发布
OwinStartup
类的代码吗?问题可能就在这里,因为您的实现看起来还不错。@drax我遇到了类似的问题。你知道这是什么原因吗?你所说的UnityResolver内部实现是什么意思?我遇到了一个类似的问题,这就是我为什么要问这个问题。@ProgrammingHeadhaches很好,我的UnityResolver类有
Dispose
方法,里面有一些逻辑,调用了这个方法,而不是我的owin Dispose实现。