c# – NancyFx – 如何在应用程序容器中处理注册为singleton的实例?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – NancyFx – 如何在应用程序容器中处理注册为singleton的实例?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1593字,纯文字阅读大概需要3分钟。
内容图文
![c# – NancyFx – 如何在应用程序容器中处理注册为singleton的实例?](/upload/InfoBanner/zyjiaocheng/793/96e90b74afe44fb493e383fb9155cde4.jpg)
我的具体上下文是一个自托管的Nancy应用程序,我在那里使用RavenDb嵌入式文档数据库.
我的引导程序看起来像这样:
public class MyBootstrapper : DefaultNancyBootstrapper
{
protected override void ConfigureApplicationContainer(TinyIoCContainer container)
{
base.ConfigureApplicationContainer(container);
container.Register<IDocumentStore>(CreateDefaultStore());
container.Register<IDoSomething, MyOtherType>().AsSingleton(); // implements IDisposable
}
private static IDocumentStore CreateDefaultStore(){...}
}
问题是我期望在NanyHost停止时调用IDocumentStore的Dispose方法和我的自定义一次性类型.
NancyHost实现IDisposable,TinyIoCContainer实现IDisposable,如果我将一个实现IDisposable的类型注册到请求容器中,它将被处理掉.我几乎可以肯定,当主机被处理时,容器将被处理,并且所有已注册的实例将被处置.
我知道我可以在引导程序之外存储对文档存储的引用,并在主机停止后处理它,我也可以想到一些其他技巧,例如让引导程序实现IDisposable并在主机停止后手动处理它,但我正在跳跃有一种更自动的方式处理所有已注册实例的处理.
我错过了一些聪明的方法来调用在应用程序容器中注册的单例实例上的Dispose()吗?
我的猜测是,因为主持人和应用程序容器应该存在直到应用程序结束,处理容器不是优先考虑的问题,但是,如果是这种情况,这似乎是一种不好的做法.
更新:
发布后,我发现this thread on the nancy group有一些与此相关的信息,但有点旧.
解决方法:
虽然应用程序关闭不应该这样做,但在自托管和OWIN场景中,您可能希望“重新启动”服务器组件,而不会拆除AppDomain – 在这些情况下,更确定的最终确定显然是有益的.
为此,我将引导程序更改为一次性,使我们的引导程序基类处理应用程序容器(如果它实现了IDisposable),并在主机处理时连接主机以将其全部处理掉:
https://github.com/NancyFx/Nancy/pull/1268
内容总结
以上是互联网集市为您收集整理的c# – NancyFx – 如何在应用程序容器中处理注册为singleton的实例?全部内容,希望文章能够帮你解决c# – NancyFx – 如何在应用程序容器中处理注册为singleton的实例?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。