2017-04-14 82 views
1

我有一個服務作爲一個框架的核心,我們將其合併到許多項目中。它使用當前靜態的密鑰將一些數據保存到本地存儲。我想讓該鍵作爲參數傳入,以便它對每個項目都是唯一的。這是因爲,當我在localhost:4200這些項目中進行測試時,與本地存儲字段/密鑰存在衝突。我所擁有的是:如何參數化Angular 2中的注入服務

@Injectable() 
export class MyService { 

private static readonly STORAGE_ID = 'model-data'; 

    constructor() { 

    } 

    someFunction() { 
     localStorage.setItem(MyService.STORAGE_ID, JSON.stringify(this._model)) 
    } 

} 

我怎樣才能參數添加到構造所以它仍然可以通過角2依賴注入被實例化?

+2

如果你提供一個具體的代碼示例,會更容易。只需添加一個構造函數參數併爲其註冊一些提供者。 –

+0

@GünterZöchbauer,「添加構造函數參數併爲其註冊一些提供者。」我不清楚這意味着什麼。 – BBaysinger

+0

我想這至少和你的問題一樣清晰;-)對於一個抽象的問題抽象的答案:p –

回答

5

你可以提供鑰匙構造函數的參數:

export const STORAGE_KEY = new InjectionToken<string>('storageKey'); 

@Injectable() 
export class MyService { 
    constructor(@Inject(STORAGE_KEY) private storageKey: string) { } 

    ... 
} 

然後在你providers你需要爲它提供一個值:

providers: [ 
    { provide: STORAGE_KEY, useValue: 'this-app-key' }, 
    MyService, 
    ... 
] 

給出一個例子in the DI documentation


或者,創建一個工廠提供的功能:

export function createServiceFactory(storageKey: string) { 
    return() => new MyService(storageKey); 
} 

和使用:

{ provide: MyService, useFactory: createServiceFactory('that-app-key') } 

這樣你就不需要@Inject參數。

相關問題