没有不值得去解决的问题,也没有不值得去学习的技术!

In Laravel 6, based on ForgetInstance, remove the resolved instance from the instance cache

再次打印实例,期望 viewStorage 为 FileViewStorage,实则为 FileViewStorage。符合预期

1. To set the configuration value at runtime, pass an array to the config function, which is reset in the middleware

config(['theme.view_storage' => 'file']);


2. The Singleton method binds a class or interface to a container that is only parsed once. Once the singleton binding is resolved, the same object instance will be returned to the container in subsequent calls. Because the previous configuration items are used when binding. Therefore, an error is reported at runtime. To print the instance, expect ViewStorage to be FileViewStorage, but in fact it is DbViewStorage. as shown in Figure 1

singleton 方法将类或接口绑定到只解析一次的容器中。一旦单例绑定被解析,相同的对象实例会在随后的调用中返回到容器中。由于在绑定时使用的是之前的配置项。因此,运行时报错。打印实例,期望 viewStorage 为 FileViewStorage,实则为 DbViewStorage。
Figure 1

3. Decide to remove the resolved instance from the instance cache based on the ForgetInstance . Register again.

	config(['theme.view_storage' => 'file']);
	$this->forgetRegisterViewStorageInstance();

    /**
     * 从实例缓存中移除已解析的 ViewStorage 相关实例,再次注册。
     * @return void
     * @throws BindingResolutionException
     */
    private function forgetRegisterViewStorageInstance() {
        app()->forgetInstance(ViewFactoryRegistry::class);
		// ...
        //注册当前ViewStorage的全部服务
        $viewFactoryRegistry = app()->make(ViewFactoryRegistry::class);
        $viewFactoryRegistry
            ->getFactory(config('theme.view_storage'))
            ->register();
    }


4. To print the instance again, it is expected that ViewStorage is FileViewStorage, but it is actually FileViewStorage. in line with expectations. as shown in Figure 2

再次打印实例,期望 viewStorage 为 FileViewStorage,实则为 FileViewStorage。符合预期
Figure 2

需要长期技术维护或远程问题排查?

我是拥有 15+ 年经验的 PHP / Go 后端工程师,长期关注已有系统维护、Bug 修复、性能优化、服务器排查、WordPress 网站维护和小功能迭代。

如果你的项目遇到以下情况,可以先从一次小问题排查开始合作:

  • ✅ PHP / Laravel / Yii2 老项目无人维护
  • ✅ Go / Gin 后端接口需要排查或优化
  • ✅ WordPress 网站访问慢、报错或插件冲突
  • ✅ Nginx / MySQL / Redis / Linux 服务器异常
  • ✅ CDN / Cloudflare / DNS / HTTPS 配置问题
  • ✅ 需要长期远程技术支持或兼职维护

更多介绍请查看:关于我 & 合作

微信:13980074657
邮箱:shuijingwanwq@gmail.com
Telegram:@shuijingwan
GitHub:https://github.com/shuijingwan

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理