Laravel における依存性注入の方法
LaravelでDI(依存性注入)を実現する方法としては、以下のものがあります。
- コンストラクタインジェクション: クラスのコンストラクタで依存関係を宣言することで、Laravel は依存オブジェクトを自動的に解析してインスタンス化します。例:
class ExampleController extends Controller
{
protected $dependency;
public function __construct(DependencyClass $dependency)
{
$this->dependency = $dependency;
}
}
- メソッドインジェクション:メソッド引数に依存関係を宣言することで、Laravelが依存オブジェクトを自動的に解析およびインスタンス化します。例:
class ExampleController extends Controller
{
public function exampleAction(DependencyClass $dependency)
{
// 使用依赖对象
}
}
- サービスコンテナ:Laravelのサービスコンテナは、インターフェイスと実装の関係の束縛を宣言するのに使用できます。これにより依存性インジェクションが実装できます。まず、サービスプロバイダーで束縛関係を定義する必要があります。次に、依存オブジェクトを使用する必要がある場所で注入できます。例:
// 在服务提供者中绑定接口和实现的关系
$this->app->bind(InterfaceClass::class, ImplementationClass::class);
// 在需要使用依赖对象的地方进行注入
class ExampleController extends Controller
{
public function exampleAction(InterfaceClass $dependency)
{
// 使用依赖对象
}
}
- ネイティブな日本語で言い換える(一つのオプションのみ必要):app()
- ネイティブに解決する
$dependency = app(DependencyClass::class); // 使用app()函数解析依赖对象
$dependency = resolve(DependencyClass::class); // 使用resolve()方法解析依赖对象
$dependency->exampleMethod(); // 调用依赖对象的方法