Dependency injection 使用Castle Windsor时自动释放对象

Dependency injection 使用Castle Windsor时自动释放对象,dependency-injection,castle-windsor,Dependency Injection,Castle Windsor,我正在启动一个新项目,我正在考虑使用依赖容器(Castle Windsor)来帮助进行单元测试。有一点令人沮丧的是,在我使用完一个对象之后,我必须告诉容器“释放”该对象 我理解这样做背后的原因,但要记住这样做仍然很麻烦。因此,我的问题是,有没有一种方法可以使对象的“释放”自动进行,这样我就不必记得释放它了?您应该在应用程序的合成根中应用该模式 您应该释放您创建的内容,但由于您应该只有一行解析对象的代码,因此您也只需要一行释放这些对象的代码 换句话说,你不必记住任何东西,因为一旦你有了那一小块基础

我正在启动一个新项目,我正在考虑使用依赖容器(Castle Windsor)来帮助进行单元测试。有一点令人沮丧的是,在我使用完一个对象之后,我必须告诉容器“释放”该对象

我理解这样做背后的原因,但要记住这样做仍然很麻烦。因此,我的问题是,有没有一种方法可以使对象的“释放”自动进行,这样我就不必记得释放它了?

您应该在应用程序的合成根中应用该模式

您应该释放您创建的内容,但由于您应该只有一行解析对象的代码,因此您也只需要一行释放这些对象的代码


换句话说,你不必记住任何东西,因为一旦你有了那一小块基础设施,你就不必再去想它了。

我刚刚在看Ninject,我喜欢它采用的方法,通过它来自动释放对象,从而创建一个“激活上下文”,使用上下文检索对象,并在最后处置上下文以释放对象。你对这种方法有什么看法?Autofac也做同样的事情,我并不特别喜欢这种方法,当释放点与解析点不同时,这会使事情变得更加困难。这种情况经常发生,例如在ASP.NET MVC的IControllerFactory或WCF的IInstanceProvider中。使实例作用域跨方法边界工作的唯一方法是创建已解析对象及其作用域的关联,您需要确保它是线程安全的。发布方法(如Windsor的)会自动为您执行此操作。@MotoSV@Mark Seemann:Ninject的最新工作是统一(当前内部[to Ninject.Web]OnePerRequestModule)及其允许调用Mark所指的发布方法的方法