gpt4 book ai didi

c# - Autofac : ComponentNotRegisteredException after web site restart

转载 作者:太空狗 更新时间:2023-10-30 00:15:20 25 4
gpt4 key购买 nike

我有一个奇怪的错误。在我将 DLL 上传到 bin 文件夹后,我的网站可以正常工作。

但是在我离开一段时间后(或从我的共享主机控制面板触发网站重启)

出现以下错误

The requested service 'Nop.Core.Data.DataSettings' has not been registered. To avoid  this exception, either register a component to provide the service, check for service registration using IsRegistered(), or use the ResolveOptional() method to resolve an optional dependency.


[ComponentNotRegisteredException: The requested service 'Nop.Core.Data.DataSettings' has not been registered. To avoid this exception, either register a component to provide the service, check for service registration using IsRegistered(), or use the ResolveOptional() method to resolve an optional dependency.]
Autofac.ResolutionExtensions.ResolveService(IComponentContext context, Service service, IEnumerable`1 parameters) +231
Autofac.ResolutionExtensions.Resolve(IComponentContext context, IEnumerable`1 parameters) +118
Autofac.ResolutionExtensions.Resolve(IComponentContext context) +75
Nop.Core.Infrastructure.DependencyManagement.ContainerManager.Resolve(String key) +156
Nop.Core.Infrastructure.NopEngine.Resolve() +110
Nop.Data.EfStartUpTask.Execute() +94
Nop.Core.Infrastructure.NopEngine.RunStartupTasks() +806
Nop.Core.Infrastructure.NopEngine.Initialize(NopConfig config) +90
Nop.Web.MvcApplication.Application_Start() +494[/i]

有人知道如何解决这个问题吗?

谢谢

最佳答案

看起来应用重启导致某些东西想要解析未注册的类型。堆栈跟踪显示某种启动任务正在运行,并且该任务正在尝试解析类型 Nop.Core.Data.DataSettings

首先,尝试找到 Nop.Core.Data.DataSettings 类型在 Autofac 中注册的位置。您应该会在代码的某处看到一行看起来像像...

builder.RegisterType<DataSettings>();

也就是说,DataSettings 类型应该在 Autofac.ContainerBuilder 中注册。如果该行在任何地方都不存在,则需要添加它以便注册该类型。 Autofac 不只是“自动”解析未注册的类型。 (或者,您可以使用 Autofac 注册 AnyConcreteTypeNotAlreadyRegisteredSource,但这通常是矫枉过正。)

如果找不到该行,则需要添加它。位置取决于您的应用程序,但您应该会看到其他一些地方正在向 Autofac 注册 - 这可能也是放置它的好地方。

如果 DataSettings 已经注册,那么这意味着您的应用程序重启并不总是以相同的顺序执行启动操作,或者甚至可能不执行始终相同的启动操作。如果您的代码在应用程序启动时运行(例如在 HttpModule 中),但未正确处理多个工作进程或未正确处理线程,则可能会发生这种情况。

另一种可能(但不太可能)的情况是,您的应用程序中运行了两个 Autofac 容器,而 DataSettings 在其中一个中,但不在另一个中。这确实是边缘案例,但它是可能的。

接下来,查看堆栈跟踪中的所有代码。找出试图解析 DataSettings 对象的内容。它可能不会直接得到解决;它可能是构造函数依赖于其他正在解决的问题。您将不得不深入研究代码才能弄明白。

无论如何,这看起来像是应用程序启动问题,而不是 Autofac 问题。 Autofac 不只是“丢失”注册 - 如果它提示您正在尝试解决未注册的问题......那么它就没有注册。

异常消息告诉您调试它需要知道的一切 - 解决发生的位置,它正在寻找什么...您需要破解您的应用程序代码,查看堆栈跟踪中显示的实际执行路径,并查看已解决的问题、时间和原因,以便您找出修复方法。

关于c# - Autofac : ComponentNotRegisteredException after web site restart,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15740726/

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