gpt4 book ai didi

c# - Autofac - 我是否需要在 MVC global.asax 中手动处理 IContainer?

转载 作者:行者123 更新时间:2023-11-30 20:46:56 26 4
gpt4 key购买 nike

我似乎无法在文档或 stackOverflow 中找到这个问题的答案(尽管我可能忽略了它)。我很好奇是否应该手动处理 ContainerBuilder 提供的 IContainer?

这是来自 Remember.Web 的代码示例:

//etc..
IContainer container = builder.Build();//returns IDisposable instance
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
//etc..

但我很好奇它是否应该看起来像这样:

public class MvcApplication : HttpApplication
{
private IContainer container;//not necessary..?

protected void Application_Start()
{
///etc..
this.container = builder.Build();//returns IDisposable instance
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
//etc..
}
protected void Application_End()
{
container.Dispose();
}
}

如果我忽略了什么,请给我指出正确的文档,谢谢!

最佳答案

在处理一次性元素时,通常应始终在处理完元素后立即将其丢弃。所以我会说是的,对此要明确。文档和样本应该提到这一点。

如果您不手动处置容器,它将在应用程序域卸载后的一段时间内被 GC 释放(连同任何包含的实例)。

注意:正如@Steven 提到的,Dispose 方法不会在垃圾回收期间被调用。因此,您在 Dispose 方法中可能拥有的任何逻辑都不会被执行。因此,处置容器是否有任何意义取决于容器持有的实例。同样,在 Application_End 中显式调用 Dispose 将确保不会丢失此类逻辑。

也就是说,如果您的容器中有需要处置的服务,您可能希望将这些注册移动到请求范围。这确保一次性实例仅在请求时存在。请求生命周期范围由 Autofac 集成模块处理,因此您无需执行任何操作即可进行清理。

关于c# - Autofac - 我是否需要在 MVC global.asax 中手动处理 IContainer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26286450/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com