c# – 了解Autofac生命周期范围

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

假设IService实现了IDisposable.

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

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

解决方法:

在生命范围内传递就像传入容器本身一样.它类似于Service locator (anti-) pattern,完全没有你描述的问题:
眷属变得不明显.

有一件事要问自己:
你真的遇到了记忆问题吗?如果没有,我不会打扰.

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

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

上一篇:c# – Autofac – 动态解析带参数的组件


下一篇:c# – 如何使用运行时参数轻松管理适配器和/或装饰器?