Замок Виндзор выпускает заводские комплектующие - PullRequest
0 голосов
/ 18 февраля 2011

Я вижу, что последнее изменение, внесенное в Виндзор, таково:

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 Ответ

2 голосов
/ 19 февраля 2011

Обращаем ваше внимание, что упомянутое вами изменение не является частью последней версии 2.5.3, но содержит изменения в версии для разработки Windsor.

Также оно не связанов показанном вами примере, который будет вести себя в vNext точно так же, как сейчас .Это внутреннее изменение, которое не повлияет на вас, если вы не призовете IReleasePolicy напрямую.

Плюс помните, что это не часть любого официального релиза, и окончательный код / ​​поведение может быть полностьюотличается.

...