如何在autofac中终止生命周期范围之前运行逻辑?

时间:2011-12-16 15:11:24

标签: autofac

我知道注册组件时有OnRelease方法,CurrentScopeEnding上也有ILifetimeScope个事件,但是这两个扩展点中的代码都很奇怪允许使用相关生命周期范围解决任何问题。如果你尝试,你会得到ObjectDisposedException。但我需要!我该怎么办?

2 个答案:

答案 0 :(得分:0)

当你的当前生命周期范围处理时,从范围中解决任何问题有点奇怪。你为什么需要它?尝试从根范围解决“你需要的东西”。

答案 1 :(得分:0)

我知道这个帖子很老,但它仍然是开放的所以我认为它是免费游戏。另外我只是自己解决了这个问题,所以我想我会回答它,因为我的谷歌搜索结果很高。可能会帮助其他人。

以下是我记录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);
    }
}

您可以使用类似的东西,并且您将在每个子生命周期范围的开头和结尾执行逻辑。