在Laravel 5中将缓存注入为依赖项

5

我希望可以避免使用Cache外观并将其注入到我的控制器中,像这样:

use Illuminate\Contracts\Cache\Store;

...

protected $cache;

public function __construct(Store $cache)
{
    $this->cache = $cache;
}

我随后在AppServiceProvider.php中使用了应用绑定。

public function register()
{
    $this->app->bind(
        'Illuminate\Contracts\Cache\Store',
        'Illuminate\Cache\FileStore'
    );
}

然而,我得到了以下错误,因为FileStore.php在构造函数中需要$files和$directory参数。

在Container.php的第872行中的BindingResolutionException错误: 在Illuminate\Cache\FileStore类中解析不可解决的依赖项[参数#1 [$directory]]

你有什么想法可以解决这个问题吗?

1个回答

21

如果你想使用与Cache门面等价的功能,你应该注入Illuminate\Cache\Repository代替:

use Illuminate\Cache\Repository as CacheRepository;

// ...

protected $cache;

public function __construct(CacheRepository $cache)
{
    $this->cache = $cache;
}
您可以在文档中查找门面的基础类: Facades - 门面类参考

4
谢谢!我希望 Laravel 文档能够更详细地介绍如何进行服务注入,而不是仅仅依靠门面(facade)供更高级的开发人员使用。当你尝试将模块提取为包时,这将非常有用。 - Dylan Pierce
如果他们能在框架代码中使用绑定的类名而不是字符串别名(Illuminate\Cache\Repository ::class 而不是 cache.store),那么一切都会变得更容易。如果我能跳进 Facade,看到那里引用的类,并注入它,那就太好了。 - Moritz Friedrich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接