在 Laravel 5 中重新分配或刷新单例

Beh*_*imi 5 provider singleton laravel laravel-5

我有一个 Provider 并且在它的 register 方法中我定义了一个这样的单例,

$this->app->singleton('my.custom.singleton', function ($app) {
    $config_value = $app->make($this->config('key'));
    return new MyClass($config_value);
});
Run Code Online (Sandbox Code Playgroud)

如您所见,我获得了一个配置值并将其作为参数放入我的类中。

在我项目的另一个地方,我改变了config('key')使用代码的价值:

Config:set('key',$my_changed_value);

我调用了一个方法,MyClass该方法使用我将它发送到上面提供程序中的类的参数。

MyClass不使用 的新值config('key')。我认为这是因为单例已使用 config 的默认值定义。

我认为如果我可以在分配新的 config 值后重新定义单例就可以了。

或者我的问题有什么解决方案吗?我错了吗?我该怎么做才能使用 中的新值MyClass

Yev*_*yev 6

只需分配null给它,它将在下次调用时从头开始创建

app()->instance(PaymentServiceContract::class, null);
Run Code Online (Sandbox Code Playgroud)