2010-04-22 120 views
0

我正在尝试了解DI如何正确工作。 我目前使用温莎作为DI容器。我使用它来在代码中动态加载我的服务而无需直接引用。但是我已经改变了行为,并且想要更多地了解使用DI的实例mgmt。使用依赖注入(DI)进行实例管理

我有一个web应用程序项目,这里是一个使用PerCall作为instancemode的WCF服务。这意味着,新的实例/呼叫。在这个WCF中,我调用一个服务(通过DI加载),这个服务调用另一个服务(再次通过DI加载)。 WCF是appdomain中的一个新实例,但服务如何?他们也是新的实例?此容器是否在所有WCF实例中共享,并且此容器中的服务是否也是单个实例?

任何人都可以澄清?

+0

如果你接受从以前的问题 – 2010-04-22 13:35:12

+0

很抱歉,有些答案你可能会得到更多有用的答案,但如果你看看我以前的帖子,然后你会看到,我从来没有收到正确的答案。这并不是我在这里问过这么多问题。我知道我可以在其他帖子上宣传答案,但我没有太多时间去阅读其他帖子。对不起,但没有故意做。 – Sven 2010-04-22 15:14:57

回答

1

当您的描述太模糊时,很难回答。尽管有几点:

  • 组件不应该“共享”容器。组件不应该提及容器。

  • 每个整个应用程序都有一个根容器实例。在webapp中,你通常会在ApplicationStart中实例化和配置它,并让它从那里完成它的工作。

  • 警惕不要依赖较短生命的组件。例如,单例组件不应该依赖于瞬态组件。

+0

看起来好像我需要了解容器中发生了什么。目前在应用程序开始时,我会根据配置文件中的内容创建该容器。 (服务)。当我需要服务时,我将它传递给构造函数。那里发生了奇迹,我得到了该服务的一个实例。但是这个实例存活多久?例如,如果我在MVC控制器中使用服务。控制器保持现场多久?在请求完成之前? – Sven 2010-04-22 15:17:58

+0

这取决于生活方式。你为什么不看看文档和用户指南? http://castleproject.org/container/documentation/v21/index.html – 2010-04-22 17:05:48