本文へ移動
rdlabo.devdocs

deny-constructor-di

このプラグインはconstructor内のDependency Injectionを禁止します。

このルールは、constructor(private readonly auth: AuthService) のようにDependency Injectionに使われるconstructor parameter propertyを報告します。Angularの inject() 関数は、standalone Componentやserviceで依存関係を取得する現代的な方法です。constructorの定型コードをなくし、DIを明示的にします。

ルール詳細

クラスのconstructorを検査し、TSParameterPropertypublicprivatereadonly などの修飾子を持つparameter)を報告します。これらはクラスフィールドになり、DIに使われるparameterです。

  • 修飾子のない通常のconstructor parameterは許可されます。
  • このルールは自動修正しません。constructor DIを手動で inject() に置き換える必要があります。

誤り

@Component({
  selector: 'app-signin',
  templateUrl: './signin.page.html',
})
export class SigninPage {
  constructor(
    private store: Store<IApp>,
    public readonly navCtrl: NavController,
  ) {}
}

正しい

import { inject } from '@angular/core';

@Component({
  selector: 'app-signin',
  templateUrl: './signin.page.html',
})
export class SigninPage {
  private readonly store = inject(Store<IApp>);
  private readonly navCtrl = inject(NavController);
}
// Non-DI constructor parameters are allowed
export class LogManager {
  constructor(logDomain: string) {
    this.logDomain = logDomain;
  }
}

オプション

このルールにオプションはありません。

有効にする場面

constructor parameter propertyではなく inject() でAngularの依存関係を取得することをプロジェクトで要求する場合に、このopt-inルールを有効にします。このルールは TSParameterProperty nodeだけを報告するため、通常のconstructor parameterは引き続き許可されます。

実装