我有一个应用程序,可在项目完成时发送电子邮件和传真通知。我的实现正在运行,但构建(即连接到我们的服务器)需要几秒钟。这最终会冻结UI几秒钟,直到通知服务已完全构建和使用。我已经在最后一刻注入工厂并创建我的服务,从而解决了这个问题。
我有什么选择来注入需要几秒钟构建的外部服务?我正在考虑指示我的容器这些服务是单例,这只会在每个应用程序启动时构建一次服务。
答案 0 :(得分:4)
简单解决方案
我会延长这些服务的生命周期(单一实例)。
问题是,如果一段时间没有发生任何事情,TCP连接通常会断开连接。这意味着您需要保留一些保持活动的数据包才能保持打开状态。
更强大的解决方案
imho连接设置不是问题。联系服务不应该花很长时间。您尚未指定外部服务。我猜它们是IIS中托管的某种Web服务。如果是这样,请确保应用程序池不会经常回收。在IIS中启动新应用程序需要一些时间。
另一个想法是,如果你真的需要等待服务完成?为什么不对动作进行排队(由线程池或单独的线程处理)并让用户继续?如果需要,只需在调用服务并失败时使用消息框。
答案 1 :(得分:2)
这些服务应该在应用程序启动时引导,然后使用单例进行DI配置,然后将其注入任何在构造函数中使用该类的类。
我可以推荐Unity或Spring.Net。我发现Unity很容易用于简单注射,所以请看一下。