2016-02-05 15 views
6

Burada, TypeScript ve Angular 2'de yazılan oldukça büyük ölçekli uygulama üzerinde çalışıyoruz. Angular 2 enjektörünü özel bir şekilde kullanın. Aslında çerçeve tarafından tasarlanmamış bir şey yapmaya çalışıyorum emin değilim, ama şimdiye kadar ne yapmaya çalıştığımı sadece kötü çözümler buldum ...Köşeli 2 - Bağımlılıkları bir bileşen olmayan ve hizmet dışı bırakılmayan özel sınıfa nasıl enjekte edilir

Yani, elde etmeye çalışıyorum Enjektörden @Component davranışını içermeyen ve Global veya komponent seviye enjektörüne eşlenmiş Servis olarak Enjektör'e maruz kalmayan sınıflara değerler uygulamaktır. (Bence bu iki kapsamdaki şeyleri nasıl enjekte edeceğimi gayet iyi anlıyorum ve gayet iyi çalışıyor). Ben çalıştığım şey

böyle bir şeydir:

export class SomeCustomClass { 
    constructor(injection:InjectionToken) { 
     console.log('injection', injection); 
    } 
} 

Ve ben bootstrap içinde veya parçası olarak enjektör Bu sınıf eklemek istiyorum eğer @component dekoratör güzel çalışacak eğer biliyorum . Sorun şu ki yapma niyetim değil. Aslında basit yaşayabilir

factory.createInstanceWithInjectionApplied(SomeCustomClass); 

:

Benim ihtiyacım gibi bir şey

var instance:SomeCustomClass = new SomeCustomClass(); 

Ama bu gerçekçi görünmemektedir.

Oh, ve evet, düşünebildiğim herşeyi denedim - @Injectable() bunun gibi örneklerde hiçbir şey yapmamak, Injector.createAndResolve ayrıca işe yaramaz ve statik özellikte Uygulama Enjektör de iyi bir fikir gibi görünmüyor.

Şimdiden teşekkürler!

+0

Zaten bir çözüm bulabildiniz İşte

bir örnektir? – Matey

cevap

0

Injector sınıfını kullanmaya çalışır mısınız?

var injector = Injector.resolveAndCreate([Car, Engine]); 
var car = injector.get(Car); 

ve bir tane daha:

export class SomeCustomClass { 
    constructor(injector:Injector) { 
    (...) 
    } 
} 
+0

Bu, ebeveyne atıfta bulunmadan yepyeni bir enjektör yaratacaktır ve aslında kendisinin enjekte edeceği, ancak ana Enjektörde tanımlanmış bir şey değil. – zii

+0

'var injector = appInjector.resolveAndCreateChild ([SomeCustomClass]); injector.get (SomeCustomClass)); İşe yaradı mı? Ayrıca bu, enjekte edilen değerleri uygulamak için aslında kaçınılmaz olan uygulama enjektörüne mevcut referansı gerektirecektir. Teşekkürler, sanırım şimdi anladım! – zii

+0

Uygulama enjektörünün bir örneğini önyükleme düzeyinde alabilirsiniz: 'bootstrap (AppComponent) .then ((componentRef) => {console.log (componentRef.injector);});'. Bunu kullanmak istediğiniz yere sağlamanın bir yolunu bulmak için ihtiyacınız var ... –

İlgili konular