Как запустить логику до окончания срока действия в autofac? - PullRequest
0 голосов
/ 16 декабря 2011

Я знаю, что при регистрации компонента есть метод OnRelease, также есть событие CurrentScopeEnding на ILifetimeScope, но, как ни странно, код в обеих этих точках расширения выполняется после того, как вам больше не разрешено разрешать что-либо с объем жизни в вопросе. Вы получите ObjectDisposedException, если попытаетесь. Но мне нужно! Что я могу сделать?

Ответы [ 2 ]

0 голосов
/ 12 января 2013

Я знаю, что эта ветка старая, но она все еще открыта, поэтому я считаю ее бесплатной игрой. К тому же я решил это сам, поэтому подумал, что отвечу, так как это было в моих результатах в Google. Может помочь другим.

Вот что я сделал для регистрации времени жизни ILifetimeScope экземпляров:


class LifetimeLogger : IStartable
{
    readonly ILifetimeScope _lifetimeScope;

    public LifetimeLogger(ILifetimeScope lifetimeScope)
    {
        _lifetimeScope = lifetimeScope;
        //_lifetimeScope = scope;
    }

    public void Start()
    {
        initLifetimeScope(_lifetimeScope);
    }

    static void initLifetimeScope(ILifetimeScope lifetimeScope)
    {
        //lifetimeScope.
        lifetimeScope.ChildLifetimeScopeBeginning += (sender, args) =>
        {
            log("Begging lifetime scope (tag {0})", args.LifetimeScope.Tag);
            initLifetimeScope(args.LifetimeScope);
        };

        lifetimeScope.CurrentScopeEnding += (sender, args) => log("Ending lifetime scope ({0})", args.LifetimeScope.Tag);
    }
}

Вы можете использовать что-то подобное, и вы сможете выполнять логику в начале и в конце каждой дочерней области действия.

0 голосов
/ 16 декабря 2011

Немного странно разрешать что-либо из области видимости, когда используется текущая область действия.Зачем тебе это?Попробуйте найти «то, что вам нужно» из корневой области видимости.

...