Iは、注射トークンはこの構成及びプロバイダを注入できるようにするデータのためのインターフェイス、スクロールバーのデフォルトの構成を有し、この設定ファイルを持っていますデフォルトの設定オブジェクトのdeepCloneを返すファクトリが含まれていたモジュール:角度2 DIは、私は、各注射のために独自のインスタンスを必要とする工場とclonnedオブジェクトの同じインスタンスを注入
providers: [
SCROLLBAR_CONFIG_PROVIDER
]
そして、それは私が私のコンポーネントのコンストラクタでそれを注入方法は次のとおりです:
export interface ScrollbarConfig {
name: string;
class: string;
options: MCustomScrollbar.CustomScrollbarOptions;
}
export const SCROLLBAR_CONFIG = new InjectionToken<ScrollbarConfig>('scrollbar.config');`
export const SCROLLBAR_CONFIG_DEFAULT: ScrollbarConfig = { ... }
export const SCROLLBAR_CONFIG_PROVIDER = {
provide: SCROLLBAR_CONFIG,
useFactory:() => {
return _.cloneDeep(SCROLLBAR_CONFIG_DEFAULT);
}
};
これは私のモジュールにプロバイダを追加する方法です
constructor(@Inject(SCROLLBAR_CONFIG) private scrollbarConfig: ScrollbarConfig) {}
したがって、スクロールバーのデフォルト設定を取得し、各コンポーネントに注入オブジェクトを拡張することで、各コンポーネントに独自の設定が適用されます。しかし、何らかの理由で、私が工場でプロバイダを使用していても、注射は私に同じインスタンスを与えます。私はそれがデフォルトオブジェクトのdeepCloneを作成すると確信していますが、その後、すべての注入に対してこの同じクローンオブジェクトを返します。私はまた、注入トークンの代わりにクラスを作成することでそれをしようとしましたが、それはまったく同じように動作しました。
私はファクトリ関数ではconsole.log()を入れてみました、それは一度だけので、明らかにこれが問題である印刷されたが、私は実際に異なるインスタンスを提供するために、それをどのように強制することができますか?
もちろん、同じインスタンスを返します。プロバイダはシングルトン(同じインジェクタ内)です。ここで問題となるのは、このプロバイダがどのように使用されているかということです。疑問はそれを明確にする必要があります。 – estus
しかし、私はちょうどあなたがどこでどのように正確に指定していないSCROLLBAR_CONFIGが使用されている –
各モジュール内のプロバイダの配列にこのプロバイダを渡すというのが私の質問に指定されました。これは良い答えを与えるために必要です。 – estus