ValueProviderArabirim dikkate alındığında :
export declare interface ValueProvider extends ValueSansProvider {
/**
* An injection token. Typically an instance of `Type` or `InjectionToken`, but can be `any`.
*/
provide: any;
/**
* When true, injector returns an array of instances. This is useful to allow multiple
* providers spread across many files to provide configuration information to a common token.
*/
multi?: boolean;
}
provideMülkiyet türüdür any. Bu, herhangi bir nesnenin ( Windowkurucu dahil ) içine girebileceği anlamına gelir . Nesne aslında önemli değil, sadece referans , yapıcıya bir parametre enjekte etmek için hangi sağlayıcının kullanılması gerektiğini belirlemek için önemlidir.
Doğal Windowyapıcıyı bir enjeksiyon jetonu olarak kullanmak iyi bir uygulama olarak düşünülmemelidir . Çünkü derleme zamanında başarısız Windowbir tarayıcı ortamında çalışma zamanında var, o da daktilo olarak var declareama Açısal 8 derleyici ilişkilendirmek için statik kod analizi yapamaz Windowsağlayıcıların ve Windowatama beri, bir şantiye parametrelerinde Windowyapılır tarayıcı tarafından, kod tarafından değil. Yine de Açısal 9'da neden çalıştığından emin değilim ...
Bağımlılık sağlayıcıyı temsil eden kendi enjeksiyon simgenizi oluşturmalısınız. Bu enjeksiyon jetonu şunlardan biri olmalıdır:
- Özel bir dize (yaptığınız gibi
'Window')
- Adanmış
InjectionToken. Örneğinexport const window = new InjectionToken<Window>('window');
Dahası, Açısal kod platform agnostik olmalıdır (bir tarayıcıda ve bir Node.js sunucusunda da yürütülebilir olmalıdır), bu nedenle dönen windowveya undefined/null bileşenlerde undefined/ nullkasasını daha sonra .