0
這只是圍繞我試圖找到的解決方案的一個普遍問題。在Laravel中實現與Cache :: disk('x')類似的功能
我有潛在的許多相同類型的服務提供商,我需要一種方式能夠有一個默認的,但是然後也手動調用切換器方法來改變它們。
目前,我已經通過配置設置將接口綁定到實施,這很好 - 但這意味着我只能支持每種服務的一個活動提供商。我注意到Cache :: disk()方法實際上是我正在尋找的,但我不確定應該在哪裏定義這種類型的開關方法。
電流:
interface IProvider {
public function getServiceInfo($args);
public function setServiceInfo($args);
}
class GoldService implements IProvider {
// implementation of the two interface methods
}
class SilverService implements IProvider {
}
// ProviderServiceProvider
public function register()
{
$this->app->bind(
App/IProvider,
App/GoldService
);
}
// Controller
public function getServiceInfo(Service $serviceId)
{
$provider = $app->make('App/IProvider');
$provider->getServiceInfo($serviceId);
}
想擁有。
// What I want to be able to do
public function getServiceInfo(Service $serviceId)
{
// Using a facade
if ($serviceId > 100)
{
Provider::getServiceInfo($serviceId);
}
else
{
Provider::switch('SilverService')
->getServiceInfo($serviceId);
}
}
我知道我扔在一個額外的要求,有門面的 - 不知道我在這裏已經糊塗了合同/外立面 - 但本質上我希望接口執行實例方法,但外觀容易訪問實例。
不是真的在這裏尋找代碼 - 這將是容易的部分。我只是不確定我是否真的注意到了這一點,並尋找正確方向的微調。
所以我會放棄的界面結合,並實現了一個工廠類實例化任何服務,我想使用(並有一個默認的配置)?然後,我在工廠課堂外觀? – Trent
我已將此標記爲已回答,因爲它將我推向了正確的方向 - 但我的執行看起來很sl,,所以我將創建一個新問題:) – Trent
在此處包含問題的鏈接。 – fubar