2016-11-15 22 views
1

自從我將代碼從Angular 2 RC5遷移到2.2.0以來,我遇到了一個令人驚訝的問題。我注入到服務的其他服務一樣,:Angular 2.2.0注入從RC5遷移=>切換注入

constructor(_http:Http, 
      _cachingServices:CachingServices, 
      _globalServices:GlobalServices, 
      _dataServices:DataServices, 
      _notificationServices:NotificationServices) 

這是工作在RC5罰款,但現在,隨着2.2.0版本,注射混合!下面的代碼:

// Constructor 
    constructor(_http:Http, 
      _cachingServices:CachingServices, 
      _globalServices:GlobalServices, 
      _dataServices:DataServices, 
      _notificationServices:NotificationServices){ 

console.debug(this.className + " param globalServices => ",_globalServices); 
console.debug(this.className + " param cachingServices => ",_cachingServices); 
console.debug(this.className + " param dataServices => ",_dataServices); 
console.debug(this.className + " param notificationServices => ",_notificationServices); 

} 

給我下面的結果:

TranslateServices param globalServices => DataServices {connectionStrings: Object, mode: "dev", magicServices: MagicServices, apiURL: "http://127.0.0.1/api.php", baseURL: "http://localhost:3000"} 
    TranslateServices param cachingServices => CachingServices {expiration: EventEmitter, cacheduration: 400000} 
    TranslateServices param dataServices => NotificationServices {notification: EventEmitter, types: Object, notification_one_like_per_day: "notification_one_like_per_day", notification_one_message_per_day: "notification_one_message_per_day", notification_thanks_for_message: "notification_thanks_for_message"…} 
    TranslateServices param notificationServices => GlobalServices {mode: "dev", apiURL: "http://127.0.0.1/api.php", baseURL: "http://localhost:3000"} 

ERROR =>服務引用混合! 我搜索了一段時間沒有任何開始的答案。

謝謝! OMG!

+0

你可以在Plunker中重現嗎?我想這是你的本地設置的一些問題,因爲這通常是正常的。 –

+0

我充滿善意,但這需要我很多時間。如果我能避免那會很好。 :'( – Ivan

+0

+如果我在構造函數中切換聲明,結果是不一樣的 – Ivan

回答

0

OMG!多麼可疑的問題。我的解決方案有幾項服務。其中每個參考另一個服務,但沒有循環參考

讓我們採取兩種服務: translate.services.ts

export class TranslateServices extends BaseServices { 

    // Constructor 
    constructor(_http:Http, 
       _globalServices:GlobalServices, 
       _cachingServices:CachingServices, 
       _dataServices:DataServices, 
       _notificationServices:NotificationServices, 
       _ipServices:IPServices, 
       _configurationServices:ConfigurationServices){ 
    } 
} 

user.services.ts

export class UserServices extends BaseServices { 

    constructor(_http:Http, 
       _globalServices:GlobalServices, 
       _cachingServices:CachingServices, 
       _dataServices:DataServices, 
       _notificationServices:NotificationServices, 
       _ipServices:IPServices, 
       _cookieServices:CookieServices) { 
    } 
} 

我們可以看到,translate.services注入configuration.services and user.serv冰注入cookie.services

在我的情況下,如果translate.services首先被初始化,以下命令:

console.debug("TranslateServices _configurationServices => ",_configurationServices); 
    console.debug("UserServices _cookieServices => ",_cookieServices); 

會給下面的輸出:

TranslateServices _configurationServices => ConfigurationServices 
UserServices _cookieServices => ConfigurationServices 

如果user.services首先初始化,相同的命令:

console.debug("TranslateServices _configurationServices => ",_configurationServices); 
    console.debug("UserServices _cookieServices => ",_cookieServices); 

將給出以下輸出:

TranslateServices _configurationServices => CookieServices 
UserServices _cookieServices => CookieServices 

的PARAMATERS _cookieServices_configurationServices似乎有一個重要的,即使他們有兩種型動物服務的位置。

爲了處理這個問題,我已經在boths服務,給予相同的簽名:

export class TranslateServices extends BaseServices { 

    constructor(_http:Http, 
       _globalServices:GlobalServices, 
       _cachingServices:CachingServices, 
       _dataServices:DataServices, 
       _notificationServices:NotificationServices, 
       _ipServices:IPServices, 
       _configurationServices:ConfigurationServices 
       _cookieServices:CookieServices) { 
    } 
} 

export class UserServices extends BaseServices { 

    constructor(_http:Http, 
       _globalServices:GlobalServices, 
       _cachingServices:CachingServices, 
       _dataServices:DataServices, 
       _notificationServices:NotificationServices, 
       _ipServices:IPServices, 
       _configurationServices:ConfigurationServices 
       _cookieServices:CookieServices) { 
    } 
} 

這似乎不是一個正常的行爲。我努力尋找解釋的開始。希望這個錯誤能夠在一個合併版本中得到糾正。

如果有人能給我更多的解釋,我想。

+0

請刪除所有這些'@Inject()'它們是多餘的。 –

+1

感謝您的技巧;)我的代碼通過alpha47,RC1,RC2, RC5,2.2.0和我還沒有考慮到所有的新模式。 – Ivan

+0

您所描述的問題似乎與繼承有關('BaseService')。 Angular2仍然不能很好地繼承。他們正在努力。 –