【问题标题】:IOC/DI CastleWindsor returns same instance every timeIOC/DI CastleWindsor 每次都返回相同的实例
【发布时间】:2012-10-14 15:55:42
【问题描述】:

正在工作的项目使用城堡温莎实现 IOC/DI。项目中有很多模块。有一个名为 ProcessEngine 的模块将 Invoices 发送到我的模块以进行自动处理,这涉及 7 个步骤。

到目前为止,ProcessEngine 模块使用队列中的Invoices 一个接一个发送,我的模块运行良好。但是现在ProcessEngine 发送了许多准备好的发票,通过将它们跨越到不同的线程中,每个发票都有自己的线程,所以问题就出现了。

我看到的问题是实例是使用 Castle Windsor 创建的,并且每次都返回相同的对象。这意味着所有线程都具有相同的实例,这会造成混乱。然后我使用 new 关键字创建了具有一些私有属性的主要类的实例,并且效果很好。

我有什么办法可以限制 Castle Windsor 容器每次为我的模块的某些类返回新实例? 项目的体系结构指南必须使用 Castle Windsor 实例化对象而不是使用新关键字。有什么解决方案吗?

我们将非常感谢任何帮助。我对温莎城堡了解不多,但我观察到这是一种单例模式,因为每次使用温莎城堡都会返回相同的对象。

【问题讨论】:

  • 您应该考虑使用段落,而不是使用它们会使您的问题难以阅读。

标签: c# .net dependency-injection inversion-of-control castle-windsor


【解决方案1】:

您需要查看lifestyles

默认行为是单例,这意味着当你请求解析时它确实会返回相同的实例。

您可以使用 PerThread 或 Transient 生活方式。

【讨论】:

  • 我不建议使用 Per Thread 生活方式,除非有人真的知道他们需要它。它很容易被滥用。
  • @KrzysztofKoźmic :是的,它确实不容易使用,我一般更喜欢 Transient,但在某些情况下它可能非常有用,所以值得一提。
猜你喜欢
  • 2014-08-19
  • 2016-10-21
  • 2018-10-16
  • 1970-01-01
  • 1970-01-01
  • 2015-11-09
  • 2020-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多