継承と依存性注入 質問する

継承と依存性注入 質問する

何らかのサービスが注入される必要がある一連の Angular2 コンポーネントがあります。最初に考えたのは、スーパークラスを作成してそこにサービスを注入するのが最善だということでした。すると、どのコンポーネントもそのスーパークラスを拡張することになりますが、この方法は機能しません。

簡略化された例:

export class AbstractComponent {
  constructor(private myservice: MyService) {
    // Inject the service I need for all components
  }
}

export MyComponent extends AbstractComponent {
  constructor(private anotherService: AnotherService) {
    super(); // This gives an error as super constructor needs an argument
  }
}

MyService各コンポーネント内に挿入し、その引数を呼び出しに使用することでこの問題を解決できますsuper()が、それは明らかに不合理です。

コンポーネントがスーパークラスからサービスを継承するように、コンポーネントを正しく構成するにはどうすればよいですか?

ベストアンサー1

各コンポーネント内に MyService を挿入し、その引数を super() 呼び出しに使用することでこの問題を解決できますが、これは明らかに不合理です。

それは不合理ではありません。これがコンストラクターとコンストラクター インジェクションの仕組みです。

すべての注入可能なクラスは、依存関係をコンストラクター パラメーターとして宣言する必要があり、スーパークラスにも依存関係がある場合は、これらもサブクラスのコンストラクターにリストし、呼び出しとともにスーパークラスに渡す必要がありますsuper(dep1, dep2)

インジェクターを渡して依存関係を強制的に取得することには、重大な欠点があります。

依存関係が隠されるため、コードが読みにくくなります。Angular2
DI の仕組みに精通している人の期待に反します。
静的コードを生成するオフライン コンパイルを中断して、宣言型および命令型の DI を置き換え、パフォーマンスを向上させ、コード サイズを削減します。

おすすめ記事