我使用Nancy 1.4.5编写了一个简单的应用程序,其中只有一个NancyModule。我正在使用带有默认引导程序的Nancy Self Hosting。
我想处置所有Nancy模块,并在应用程序配置(例如,当前端口)更改时重新发现它们。处置Nancy并对其进行重新构造时,一切似乎都在重新发现为止,除非在错误的时间调用了Dispose。 Dispose似乎是NancyModules发现过程的一部分。
在应用程序启动时,我调用以下代码:
_host = new NancyHost(hostConf, new Uri($"http://localhost:{Port}"));
_host.Start();
在我的NancyModule中,我实现了IDisposable。
在构造NancyHost之前(在调用Start()之前),我看到NancyModule中的Dispose方法被命中了。
任何帮助将不胜感激。
答案 0 :(得分:1)
在使用TinyIOC容器注册进行了更多研究之后,我发现了正在发生的事情。
在初始自动注册期间构造/处置NancyModule实现类。 每次调用路线时也会对其进行构造/配置。
对于我的应用程序而言,这不是理想的行为,因为该服务背后的支持是持久连接,并且每次调用路由时重新连接都会为每个请求增加〜100ms响应时间。
最后,我实施了一个不需要的黑客程序,因为我不知道该怎么办。我创建了持久连接服务的静态单例实例,该实例可以通过单例中的函数进行重置。这样,即使在每次路由调用期间都构造了NancyModule,也不会因为每次都连接后端连接而对性能造成影响。
如果有一种方法可以将NancyModule设置为TinyIOC的单例注册,那会更好,但是似乎即使我通过执行自定义容器注册来显式设置它,每次仍在构造它被叫。
答案 1 :(得分:0)
您是在BootStrapper中覆盖ConfigureApplicationContainer
还是ConfigureRequestContainer
吗?
protected override void ConfigureApplicationContainer(TinyIoCContainer container)
{
base.ConfigureApplicationContainer(container);
// ...
}
protected override void ConfigureRequestContainer(TinyIoCContainer container, NancyContext context)
{
base.ConfigureRequestContainer(container, context);
// ...
}