【发布时间】:2011-02-18 15:08:56
【问题描述】:
我看到最近对 Windsor 做出的重大改变如下:
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 实现:
由于 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 解决此问题?
谢谢。
【问题讨论】:
标签: .net castle-windsor aop