gpt4 book ai didi

asp.net-mvc - 应用程序池回收后 Autofac 无法解决

转载 作者:行者123 更新时间:2023-12-01 23:41:14 27 4
gpt4 key购买 nike

我使用 Autofac 多年,从未见过这种行为:构建后,应用程序运行良好。 但是应用程序池被回收后(我通过触摸 web.config 对此进行了测试),我得到了一个DependencyResolutionException:

在“Namespace.Controllers.HomeController”类型上使用“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”找到的构造函数都不能用可用的服务和参数调用

HomeController 有一个依赖项,它有其他依赖项,等等。但我知道它可以解决它们,因为它在它被回收之前就解决了。到底为什么会这样???

我像这样 Autowiring 所有东西:

public static IContainer GetAutoFacContainer()
{
var builder = new ContainerBuilder();
var assembliesToRegister = AppDomain.CurrentDomain.GetAssemblies()
.Where(a => a.FullName.StartsWith("Prefix")).ToArray();
builder.RegisterAssemblyTypes(assembliesToRegister)
.AsImplementedInterfaces().AsSelf().PropertiesAutowired().InstancePerLifetimeScope();
return builder.Build();
}

然后我将容器用于 WebAPI MVC Controller 。

var autoFacContainer = DependencyRegistrar.GetAutoFacContainer();
DependencyResolver.SetResolver(new AutofacDependencyResolver(autoFacContainer));
GlobalConfiguration.Configuration.DependencyResolver =
new AutofacWebApiDependencyResolver(autoFacContainer);

最佳答案

感谢 Steven 上面的评论,我确实找到了其他问题的答案以及 Autofac 网站。我不知道为什么这些从未出现在我的研究中。

http://docs.autofac.org/en/latest/faq/iis-restart.html

解决方案

更改 AppDomain.CurrentDomain.GetAssemblies()

收件人BuildManager.GetReferencedAssemblies().Cast<Assembly>()

完成!

关于asp.net-mvc - 应用程序池回收后 Autofac 无法解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39735399/

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