- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个奇怪的错误。在我将 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/
我的 Windows 使用 Ubuntu 设置了 WSL。它已经工作了一段时间,直到我升级到 WSL2。 问题是:每次我启动我的电脑(或重新启动我的电脑)时,它都会失去从 Ubuntu 到 Windo
我正在使用 docker 版本 1.1.0,由 systemd 使用命令行启动 /usr/bin/docker -d ,并试图: 运行容器 停止 docker 服务 重新启动 docker 服务(使用
鉴于以下(为了论证而简化)docker-compose.yml文件: version: '3' services: postgres: image: fleetit-postgres
我使用 Vertx SockJs 构建了一个 Eventbus 桥。 这是我的verticle的代码: @Override public void start() throws Exception {
使用docker stack deploy,我可以看到如下信息: Ignoring unsupported options: restart 是否意味着重启政策没有到位? 是否必须在撰写文件之外指定它
我们的 Varnish 实例 /usr/sbin/varnishd -P /var/run/varnish.pid -a :6081 -f /etc/varnish/cm-varnish.vcl -
Varnish 是否保留崩溃/重启日志? 我目前正在监控一个 varnish 服务器,它似乎每周都会重新启动,当 CPU 使用率达到大约 100%(负载有点高 - 在 2 核机器上大约 6~7)并且
我有一个 Android 应用程序,在您第一次运行时运行良好。但是,当您按 HOME(因此暂停)并从主屏幕重新启动它时,我得到的只是音乐重新启动。 我还没有进入保存/恢复状态的阶段(很快就会完成!)。
我的应用程序有一个服务,每 X 分钟对数据库执行与 stopSelf() 相同的操作,并进入 onDestroy 方法我已经放置了这段代码以便在同一时间后重新启动服务: @Override publi
复制代码 代码如下: '******************************************************************** '* '* 
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
我检查了我在 ECS 集群中运行的一个 docker 容器,它的重启策略为空白(“{{ .HostConfig.RestartPolicy.Name }}”)。我不确定 ECS 在发生故障时会做什么,
我用 Google Cloud Shell运行 Jupyter Notebook在实例上,但在 1 hours 之后,连接断开。 我重新连接到实例,什么都没有,与重置实例相同。 So, please
Java中是否有任何命令或程序可以重新启动我的应用程序本身? 我开发了一个 Java 桌面应用程序,但过了一段时间它就会挂起。我不知道为什么,所以我想重新启动我的应用程序本身。是否可以? 最佳答案 你
我已经创建了一个容器,却忘记了在创建容器时设置--restart ='always'。 是否可以为已经创建的容器修改此选项?我知道我可以创建一个新的,但这很有用,因为它发生在我身上好几次了... 最佳
是否可以使用 pm2 重新启动特定组的应用程序?像 pm2 restart service-* 重新启动 service-a 和 service-b 之类的东西?我发现 pm2 restart ser
我是一个刚开始使用C++编写代码已经有几个星期了。我已经编写了一个程序来拥有一个菜单,用户可以从中选择执行不同任务的选项。我有两个问题:首先,我该如何做,以便在执行任务后将用户发送回菜单;其次,当用户
所以我有一个应用程序,用户通过 3 个 View Controller 然后向 Facebook 提交图片。在他们将其提交到 Facebook 后,我希望他们能够选择重新启动该过程,就好像他们重新启动
我正在尝试构建一个 hadoop Dockerfile。 在构建过程中,我添加了: && apt install -y openssh-client \ && apt install -y o
当您运行docker run时,可以选择添加--rm和--restart。但是,如何在dockerfile中获得相同的效果? 最佳答案 Dockerfile用于指定构建镜像的指令。 生成镜像后,可以使
我是一名优秀的程序员,十分优秀!