Denetleyicileri ve yardımcı sınıflarımı bağımlılık enjeksiyonu kullanacak şekilde değiştirdim ve sanırım yardımcı sınıflarım sonsuz bir döngüde sıkışmış durumdayım.Özel sınıflarda bağımlılık enjeksiyonu L4.2'de belirsiz döngüde mi sıkışmış?
Aşağıda, özel ServiceProvider'ım ve iki örnek yardımcı sınıfım var. Gördüğünüz gibi birbirlerini enjekte ederler, böylece ileri geri gitmeye devam ederler.
Bu sorunun çözümü nedir? Ne gibi bir hata yapıyordum?General
ve Person
gibi yardımcı sınıflar üzerinde testler yürütebilmem için ne yapabilirim?
if (isset($appmade->General)) {
// inject the General app that's already instantiated
} else {
$abc = app::make('\Lib\MyOrg\General');
$appmade->General = $abc;
}
doğru yolu böyle mi: Ben işe yarayabilir sanırım
bir yolu, aşağıdakileri yapın benim ServiceProvider var?
// /app/providers/myorg/MyOrgServiceProvider.php
namespace MyOrg\ServiceProvider;
use Illuminate\Support\ServiceProvider;
class MyOrgServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->bind('\Lib\MyOrg\General', function ($app) {
return new \Lib\MyOrg\General(
$app->make('\Lib\MyOrg\Person'),
$app->make('\App\Models\User')
);
});
$this->app->bind('\Lib\MyOrg\Person', function ($app) {
return new \Lib\MyOrg\Person(
$app->make('\Lib\MyOrg\General'),
$app->make('\App\Models\Device')
);
});
}
}
// /app/libraries/myorg/general.php
namespace Lib\MyOrg;
use App\Models\User;
use Lib\MyOrg\Person;
class General
{
protected $model;
protected $class;
public function __construct(Person $personclass, User $user)
{
}
}
// /app/libraries/myorg/person.php
namespace Lib\MyOrg;
use App\Models\Device;
use Lib\MyOrg\General;
class Person
{
protected $model;
protected $class;
public function __construct(General $generalclass, Device $device)
{
}
}
Kodun uygun şekilde girildiğini düşünüyor musunuz? – hek2mgl
@ hek2mgl Kodun soruda görüntülenme şeklini mi ima ediyorsunuz? Bana iyi görünüyor ... okunabilirlik önerileriniz varsa lütfen bir düzenleme gönderin. –
@John Bu iyi değil. Hiç iyi değil. Derslerini tekrar gözden geçirmelisin. Dairesel bağımlılıktan kaçının. – brainless