Castle Windsor发布型号工厂组件

时间:2011-02-18 15:08:56

标签: .net castle-windsor aop

我发现最近对温莎做出的改变如下:

change - IReleasePolicy interface has a new method: IReleasePolicy CreateSubPolicy(); usage of
    sub-policies changes how typed factories handle out-of-band-release of components (see
    description)

    impact - medium
    fixability - easy

    description - This was added as an attempt to enable more fine grained lifetime scoping (mostly
        for per-typed-factory right now, but in the future also say - per-window in client app).
        As a side-effect of that (and change to release policy behavior described above) it is no
        longer possible to release objects resolved via typed factories, using container.Release.
        As the objects are now tracked only in the scope of the factory they will be released only
        if a call to factory releasing method is made, or when the factory itself is released.

    fix - Method should return new object that exposes the same behavior as the 'parent' usually it
        is just best to return object of the same type (as the built-in release policies do).

我正在使用如下所述的自动释放IDisposable实现:

http://devlicio.us/blogs/krzysztof_kozmic/archive/2010/01/27/transparently-releasing-components-in-windsor.aspx

因为kernel.ReleaseComponent不再释放组件,所以以下内容不再符合要求:

using (var instance = container.Resolve<Func<IMyDisposable>>()()) 
{
...
} // my interceptor gets called here, but instance is not disposed because the Kernel's ReleasePolicy doesn't track it anymore.

如何使用最新版本的Windsor解决此问题?

感谢。

1 个答案:

答案 0 :(得分:2)

请注意,您提及的更改是最新2.5.3版本的一部分,但更改了Windsor的开发版本。

此外,它与您展示的示例无关,在vNext中的行为与现在的行为完全相同。这是一个内部更改,除非您直接呼叫IReleasePolicy,否则不会影响您。

另外请记住,任何官方发布的部分和最终的代码/行为可能完全不同。

相关问题