は、あなたが割り当てたエイリアスを使用してください。あなたはあなたが言及したようにあなたのconfig/app.php
の中にそれを追加します、そして、あなたはもうそれについて心配しません。これはあなたが注入すべきクラスではありません。
残念ながら、コードを見ると、このパッケージは依存性注入のためにうまく機能しませんでした。この結合を
$this->app->bind('XeroPrivate', function() use ($config) {
return new \XeroPHP\Application\PrivateApplication($config);
});
、あなたが$private = app('XeroPrivate');
を呼び出すことにより、IOCのうち新しいPrivateApplication
インスタンスを解決できることを意味します。これは、サービスプロバイダの内部のバインディングの1の例です。しかし、PrivateApplication
は特別な構築(コンストラクタで渡された設定)を必要とするため、この設定は依存性注入に役立ちません。
バインディングはXeroPrivate
に設定されていますが、このクラスは存在しません。つまり、注入するようにヒントを入力することはできません。 config/app.php
ファイルにXeroPrivate
をエイリアスとして追加した可能性がありますが、これはXeroPrivate
クラスの問題を回避しますが、これはPrivateApplication
クラスではなく、ファサードクラスが挿入されていることを意味します。
PrivateApplication
クラスを正しく挿入できるようにするには、独自のバインドを設定する必要があります。あなたは、新しいサービスプロバイダを作成、またはちょうどあなたのAppServiceProviderにこれを追加することができます。
$this->app->bind('XeroPHP\Application\PrivateApplication', function ($app) {
return $app['XeroPrivate'];
});
あなたがPublicApplication
とPartnerApplication
ために同じことを行う必要があります:あなたが安全にすることができ、これらのバインディングで
$this->app->bind('XeroPHP\Application\PublicApplication', function ($app) {
return $app['XeroPublic'];
});
$this->app->bind('XeroPHP\Application\PartnerApplication', function ($app) {
return $app['XeroPartner'];
});
あなたのコンストラクタにクラスのいずれかを注入し、それらを適切に解決されます:
use XeroPHP\Application\PrivateApplication;
use XeroPHP\Application\PublicApplication;
use XeroPHP\Application\PartnerApplication;
public function __construct(PrivateApplication $xeroPrivate, PublicApplication $xeroPublic, PartnerApplication $xeroPartner)
{
$this->xeroPrivate = $xeroPrivate;
$this->xeroPublic = $xeroPublic;
$this->xeroPartner = $xeroPartner;
}
コントローラがインスタンス化されると、それは意志新しいXeroPHP\Application\PrivateApplication
インスタンスが必要であることを確認し、上で作成したバインディングを使用してこのインスタンスをIOCから解決します(これにより、XeroPublic
オブジェクトがIOCから解決されます)。 XeroPHP\Application\PublicApplication
とXeroPHP\Application\PartnerApplication
についても同じことが行われます。
残りのクラスは特別な構成を必要としないため、カスタムバインディングを作成する必要はありません。であると彼らは、注入することができます。
use XeroPHP\Models\Accounting\Invoice;
use XeroPHP\Models\Accounting\Invoice\LineItem;
use XeroPHP\Models\Accounting\Contact;
use XeroPHP\Models\Accounting\BrandingTheme;
use XeroPHP\Models\Accounting\Attachment;
public function __construct(Invoice $xeroInvoice, LineItem $xeroLineItem, Contact $xeroContact, BrandingTheme $xeroBrandingTheme, Attachment $xeroAttachment)
{
$this->xeroInvoice = $xeroInvoice;
$this->xeroLineItem = $xeroLineItem;
$this->xeroContact = $xeroContact;
$this->xeroBrandingTheme = $xeroBrandingTheme;
$this->xeroAttachment = $xeroAttachment;
}
コントローラがインスタンス化されると、それは、このクラスのためにIOCに結合が存在しないので、それは新しいXeroPHP\Models\Accounting\Invoice
インスタンスが必要ですが、ことがわかります、それだけでnew
のアップ新しいインスタンスとそれを注入する。上のクラスの残りのクラスでも同じことが行われます。
'as Xero'を削除するか、コンストラクタを' Xero $ xero'に変更してください。 – jardis