C# 如何在测试中使用NinjectSelfHostBootstrapper,并且有多个测试通过?

C# 如何在测试中使用NinjectSelfHostBootstrapper,并且有多个测试通过?,c#,asp.net-web-api,ninject,C#,Asp.net Web Api,Ninject,以下是我的NUnit测试代码(简化以隔离问题): 当我使用默认的NinjectSelfHostBootstrapper运行该测试时,第一个测试顺利通过,但第二个测试抛出一个异常,表示: URI“”的注册已存在 当我检查这两个文件的代码时: 我可以理解为什么在后者中创建了HttpSelfHostServer,并且在服务器上调用了OpenAsync(),但是在服务器上没有调用CloseAsync(),这是一个错误还是我做错了什么?如何让NinjectSelfHostBootstrapper处理随

以下是我的NUnit测试代码(简化以隔离问题):

当我使用默认的
NinjectSelfHostBootstrapper
运行该测试时,第一个测试顺利通过,但第二个测试抛出一个异常,表示:

URI“”的注册已存在

当我检查这两个文件的代码时:


我可以理解为什么在后者中创建了
HttpSelfHostServer
,并且在服务器上调用了
OpenAsync()
,但是在服务器上没有调用
CloseAsync()
这是一个错误还是我做错了什么?如何让NinjectSelfHostBootstrapper处理随后调用的测试?

您有没有弄明白这一点?@RobertKaucher没有,对不起。
public class MyController : ApiController
{
    [HttpGet]
    [Route("api/route")]
    public string Route1()
    {
        return "route";
    }
}

[TestFixture]
public class MyTestFixture
{
    private NinjectSelfHostBootstrapper _bootstrapper;

    [SetUp]
    public void SetUp()
    {
        var config = new HttpSelfHostConfiguration("http://localhost:8767");
        config.MapHttpAttributeRoutes();

        var kernel = new StandardKernel();
        this._bootstrapper = new NinjectSelfHostBootstrapper(() => kernel, config);
        this._bootstrapper.Start();
    }

    [TearDown]
    public void TearDown()
    {
        if (this._bootstrapper != null)
        {
            this._bootstrapper.Dispose();
        }
    }

    [Test]
    public void MyTest1()
    {
        using (var client = new HttpClient())
        {
            var request = new HttpRequestMessage(HttpMethod.Get, "http://localhost:8767/api/route");
            var response = client.SendAsync(request).Result;
            var content = response.Content.ReadAsStringAsync().Result;

            Assert.That(content, Is.EqualTo("\"route\""));
        }
    }

    [Test]
    public void MyTest2()
    {
        using (var client = new HttpClient())
        {
            var request = new HttpRequestMessage(HttpMethod.Get, "http://localhost:8767/api/route");
            var response = client.SendAsync(request).Result;
            var content = response.Content.ReadAsStringAsync().Result;

            Assert.That(content, Is.EqualTo("\"route\""));
        }
    }
}