2017-03-31 10 views
1

ルーメンに依存性注入を使用する構造を構築しようとしています。Laravelで依存関係を自動挿入する方法

私はサービスレイヤとリポジトリレイヤを持っています。

サービスレイヤにリポジトリレイヤを挿入したいと思います。コードを表示しようとしましょう

interface IUserRepostitory { 
     public function getByID($id); 
    } 

    class UserRepository extends BaseRepository implements IRepository{ 
     public function getByID($id) { 
      //Please don't think how this function works, my question about dependency injection 
      return $this->findOrFail($id); 
     } 

    } 


    interface IService { 
     public function getByID($id); 
    } 

    class UserService implements IService{ 

     private $Repository; 
     public __construct(IUserRepositor $UserRepository) { 
      $this->Repository = $UserRepository 
     } 

     public function getByID($id) { 
      return $this->Repository->getByID($id); 
     } 
    } 

ここで私は依存関係リゾルバを登録しています。

//Dependency resolver for Repository Layer 
class RepositoryServiceProvider extends ServiceProvider { 

    public function register() 
    { 
     $this->app->singleton(IUserRepository::class, function() { 
      return new UserRepository(); 
     }); 
    } 

} 

ここで私は、サービスレイヤ

class ServiceServiceProvider extends ServiceProvider { 

    public function register() 
    { 
     $this->app->singleton(IUserService::class, function() { 
      //Here is what I don't like 
      //It would be great a solution that automaticly resolve UserRepository. 
      return new UserService(new UserRepository()); 
     }); 
    } 
} 

を登録しています見ての通り、私は自動UserServiceのに依存関係を解決します。しかしシングルトンメソッドは、返すオブジェクトを作成する必要があります。

良い方法がありますか?

***注:文法には注意しないでください。私はそれを内腔に書いていますが、laravelと同じ問題です。

答えて

1

あなたはIUserRepositoryUserRepositoryを結合したら、その後、make機能で解決することによって、IUserRepositoryIUserServiceをインスタンス化することができます!

のようなあなたのServiceServiceProviderを変更:

class ServiceServiceProvider extends ServiceProvider 
{ 
    public function register() 
    { 
     $this->app->singleton(IUserService::class, function ($app) { 
      return new UserService($app->make(IUserRepository::class)); 
     }); 
    } 
} 
+0

は素晴らしい作品、ありがとうございました! – fobus

関連する問題