ValueProvider
Arabirim 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;
}
provide
Mülkiyet türüdür any
. Bu, herhangi bir nesnenin ( Window
kurucu 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 Window
yapıcıyı bir enjeksiyon jetonu olarak kullanmak iyi bir uygulama olarak düşünülmemelidir . Çünkü derleme zamanında başarısız Window
bir tarayıcı ortamında çalışma zamanında var, o da daktilo olarak var declare
ama Açısal 8 derleyici ilişkilendirmek için statik kod analizi yapamaz Window
sağlayıcıların ve Window
atama beri, bir şantiye parametrelerinde Window
yapı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 window
veya undefined
/null
bileşenlerde undefined
/ null
kasasını daha sonra .