我有一个名为Helper的Laravel Facade,它向外部存储库注入了构造函数依赖项。但是我无法通过facades服务提供商传递它的依赖项。
这是Helper.php的代码
<?php
namespace App\Helpers;
use App\Repositories\PropertyUpload\PropertyUploadRepositoryInterface;
class Helper
{
/**
* @var PropertyUploadRepositoryInterface
*/
protected $propertyUploadRepo;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct(
PropertyUploadRepositoryInterface $propertyUploadRepository
)
{
$this->propertyUploadRepo = $propertyUploadRepository;
}
/**
* Get property Cover Photo
*
* @param int $property_id
* @return string $img_url
*/
public function getPropertyCoverPhoto($property_id)
{
$property_uploads = $this->propertyUploadRepo->findBy(['property_id' => $property_id, 'status' => 1]);
return $property_uploads;
}
}
以下是我在FacadesServiceProviders的工作。php文件
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Repositories\PropertyUpload\PropertyUploadRepository;
class FacadesServiceProviders extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app->bind('helper', function(PropertyUploadRepositoryInterface $propertyUploadRepository){
return new \App\Helpers\Helper($propertyUploadRepository);
});
}
}
但是现在我得到了这个错误
Symfony\Component\Debug\Exception\FatalThrowableError(E\u RECOVERABLE\u ERROR)
类型错误:传递给App\Providers\FacadesServiceProviders的参数1::App\Providers{closure}()必须是App\Providers\PropertyUploadRepositoryInterface的实例,给定的Illumize\Foundation\Application的实例,
如果我删除了构造函数依赖项,我的助手facades就可以正常工作。因此,在配置外观时没有错误。
我的问题是如何在上面的Laravel Service Provider中传递构造函数依赖项?
如果有人以前有这种情况的经验,请帮助我。
此外:
除非你想要,否则你不需要装订。您的facade可以只访问名为App\Helpers\Helper的绑定,它可以毫无问题地解决它(只要可以从容器中解析App\Helpers\Helper)。
protected static function getFacadeAccessor()
{
return \App\Helpers\Helper::class;
}
然后最重要的是,你甚至不需要制作一个Facade来使用Facade。\Facades\App\Helpers\Helper::随机方法()
将为该类使用实时外观。
只需绑定类本身并让Laravel处理实例化,它将使用反射来确定依赖关系。
$this->app->bind('helper', \App\Helpers\Helper::class);
当然,假设您已经将一个具体类绑定到接口PropertyUploadRepositoryInterface,这样Laravel就可以注入正确的依赖关系。
我正在尝试构建一个简单的REST服务来学习OSGI。我正在使用Spark Servlet来处理请求。 我将 spark core 作为依赖项嵌入,在 maven 中构建了我的项目,并在部署时在 Karaf 中出现了布线包错误。 看起来我一个接一个地跟踪程序包,一个一个地解决每个错误,仅仅解决依赖关系就需要大约2个小时。显然我做错了什么。。 我应该如何执行此操作,以便使用 spark servlet
我正在从一个使用Android-Maven-Plugin的Maven项目中构建一个Android应用程序。在这个项目中,我使用了新的beta版数据绑定库。 它包含在Android SDK的本地m2repository中(extras/Android/m2repository)。这个存储库中的库打包为AAR类型。 附注:对于我自己的本地构建,我有几个解决方案(例如重新打包为jar),但我更喜欢一个更
给予 这在gradle 1.3中无法正常工作。(即,子项目包含所有依赖项) 这是一个bug还是有不同的语法来排除项目依赖关系?
在应用中,您希望使用不同的类来处理不同的任务以保持代码的简洁。我们把这些类称为 依赖。如何将这些依赖关系传递给将在后台任务调用的方法呢? 当您在后台任务中调用静态方法时,仅限于应用程序的静态上下文,这需要您使用以下获取依赖关系的模式: 通过 new 手动实例化依赖 服务定位器模式 抽象工厂模式 或 建设者模式 单例模式 然而,所有这些模式使您的应用程序的单元可测试性方面变得非常复杂。为了解决这个问
我一直在读这方面的文章,原因是Bazel在二进制文件的中只添加了它的直接依赖项。因为是传递依赖项,所以二进制文件找不到它。 为了解决这个问题,我可以想到以下几个黑客: > 添加难看的链接器标志,告诉Bazel添加到而不是。但是,这被认为是一个坏主意,因为不推荐使用,并且不允许通过重写。 使用而不是 使用而不是. 谢了!
我在intellij工作,使用spring boot和gradle。 我有一个使用其他两个库的服务,我似乎遇到了一些传递依赖性问题。 该服务中的spring boot版本已从2.1.2更新到2.1.4,这使得该服务不再工作。 我能够在gradle中干净地构建这个项目,但是一旦我启动它,在运行时我得到…无法解决org.slf4j: slf4j-api: 1.7.26。 我按照要求手动将库中的 slf