了解Autofac生命周期范围

idu*_*sun 6 c# autofac

从Autofac的文档中,我了解到它保留了对它创建的每个IDisposable实现者的引用.因此它可能导致OutOfMemoryException.因此,建议的解决依赖关系的方法是使用ILifetimeScope.

假设IService实现了IDisposable.

class MaintenanceTask {
    private IService service;
    public MaintenanceTask(ILifetimeScope lifetimeScope) {
        service = lifetimeScope.Resolve<IService>();
    }
    //...do your work
}
Run Code Online (Sandbox Code Playgroud)

但这种方法的问题在于它隐藏了依赖关系.我必须查看代码以了解该类所依赖的内容.还有其他方法可以更明确地处理这个问题吗?更具体地说,在不必查看代码的情况下使依赖关系变得更加明显?还是我完全弄错了?

Dan*_*rth 6

在生命范围内传递就像传入容器本身一样.它类似于服务定位器(反)模式,并且完全出现了您所描述的问题:
依赖性变得不明显.

有一件事要问自己:
你的记忆力确实存在问题吗?如果没有,我不会打扰.

另一个指针:
如果您有使用后应立即处理的个别服务,请使用工厂创建它们,并使您的类依赖于工厂而不是服务本身.

生命周期范围的使用方案略有不同:
当您需要本地组合根时使用它们.我从来没有在Windows应用程序中需要这样的东西,但在Web应用程序中,Session或Request可能需要本地组合根.