2017-11-19 4 views
1

Angular Docsによれば、プロバイダーが必要なときに別のオブジェクトを挿入することができます。"提供する"と "useClass"を使用すると便利な場合はありますか?

古いコンポーネントがOldLoggerクラス[...]に依存しているとしますが、何らかの理由で更新できないとしますそれを使用する古いコンポーネント。

私はまだ疑問です。なぜ、古いコンポーネントを更新できなかったのですか? コンポーネントまたはの指示がの場合は、クラスが必要で、もう1つは注入すると危険です。 provideuseClassを使用する必要があるのは何ですか?

useClass
+0

のErrorHandlerのMyErrorHandlerクラスを使用するように角度を教えてくれますエラーを処理するための私のカスタムクラスを使用したいです'useClass'はデフォルトの、最もよく使われる戦略です。あなたがこのプロバイダのようなプロバイダを定義した場合に使用されます:[provider:[MyClass]' - > 'providers:[provide:MyClass、useClass:MyClass]' –

答えて

1

MyClassインスタンスが注入されるべきコンストラクタパラメータの型である場合、MyMockClassインスタンスは代わりに注入されることを意味する代替の実施

{ provide: MyClass, useClass: MyMockClass } 

を提供するためのものです。

useValue

は角の使用カスタムインスタンスの作成ロジックを作ることで利用できるようになる 'myServerPort' useValueない場合のために価値を提供する方法を持っていない角度

providers: [ 
    DebA, 
    DebB, 
    { provide: MyClass, useValue: (a, b) => new MyClass(a, b), deps: [DepA, DebB] } 
] 

または

{ provide: 'myServerPort', useValue: 8080 } 

2

私のケースでは、角度によって提供されるデフォルトのクラス以外の別のロジックを実装する必要がある場合に使用します。たとえばのErrorHandler 2+角度でエラーを処理するためのデフォルトのクラスですが、私は

{ provide: ErrorHandler, useClass: MyErrorHandler } 

を使用するので、それが代わりに

関連する問題