2

Castle.Windsor 的新手,只是想检查一下。

我一直在阅读有关短暂生活方式和“释放你解决的问题”的文章——我为我的 ASP.NET MVC3 应用程序创建了一个资源提供程序,并正在我的新资源提供程序工厂(这是资源访问的“中心”)中解决它在 ASP.NET 中):

IContainerAccessor accessor = HttpContext.Current.ApplicationInstance as IContainerAccessor;            
IResourceProvider provider = accessor.Container.Resolve<IResourceProvider>(new Arguments(new { resourceName = resourceName }));

LoggerService.Information(String.Format("Tracking? {0}", accessor.Container.Kernel.ReleasePolicy.HasTrack(provider)));

IResourceProvider是瞬态的,因此我可以将不同的值传递resourceName给构造函数(因此可以从不同的资源文件返回不同的标签)。

我担心我需要明确调用Release这些IResourceProvider对象,但我的HasTrack支票总是返回false- 所以我认为这是一件好事?

容器没有跟踪这个对象,所以 GC 会(最终清理这个对象)。

那么容器何时会跟踪这个对象 - 如果它有创建佣金问题?

4

2 回答 2

3

您只发布您明确要求的组件。有两种显式获取组件的方法:

a)解决,您在上面使用过。通常,在您的应用程序中只进行一次解析调用是一种很好的做法。因此,您可能想查看 TypedFactoryFacility。

b) 使用工厂。在这种情况下,您将使用 TypeFactoryFacility。如果您从工厂获得组件,它及其依赖项将在以下情况下被释放:

  • 您可以通过在工厂上调用“销毁”方法来显式释放它。
  • 或者它自己的工厂被释放。

如果您没有明确创建组件,则永远不必发布它。

于 2013-05-03T13:39:49.037 回答
1

这篇博文详细讨论了这个话题。

于 2013-05-04T01:57:15.893 回答