2011-08-23 54 views
4

我有一个应用程序在项目完成时发送电子邮件和传真通知。我的实现工作正常,但需要几秒钟才能构建(即连接到我们的服务器)。这最终会冻结UI几秒钟,直到通知服务已完全构建和使用。我已经将问题推到了最后,因为它会在最后时刻注入工厂并创建我的服务。注入创建昂贵的服务

我有什么选择注入需要几秒钟构造的外部服务?我正在考虑指示我的容器这些服务是单身人士,这只会在每次应用程序启动时构建一次服务。

+2

相关:http://blog.ploeh.dk/2011/03/04/ComposeObjectGraphsWithConfidence.aspx –

+1

+1 - 我在这里问了一个类似的问题(但不是重复的):http://stackoverflow.com/questions/ 6960686/IS-的二图案限制性-WRT昂贵-对象创建耦合与 - 不频繁 – ckittel

回答

4

简单的解决方案

我想给那些服务寿命更长(singleinstance)。

虽然问题是TCP连接通常会断开连接,如果一段时间没有发生任何事情。这意味着你需要有一些保持活跃的数据包来保持它们的开放。

更健壮的解决方案

IMHO连接建立是没问题的。联系服务不应该花很长时间。您尚未指定外部服务。我猜测他们是在IIS中托管的某种Web服务。如果是这样,请确保应用程序池不会经常回收。在IIS中启动新的应用程序可能需要一些时间。

另一种想法是,如果你真的需要等待服务完成?为什么不对队列进行排队(由线程池或单独的线程处理)并让用户继续?如果需要,只需在服务被调用并失败时使用消息框。

2

这些服务应该在应用程序启动时引导,然后通过DI使用单例配置,然后将单例注入到在其构造函数中使用该类的任何类中。

我可以推荐Unity或Spring.Net。我发现Unity非常容易用于简单注入,所以请注意一下。