2017-03-01 49 views
-1

我有一個組件使用的注射服務。在打字稿控制檯應用程序中重新使用注入服務

@Injectable() 
export class SomeService { 
    constructor(private http: Http){} 
    ... 
} 

與此同時,我正在嘗試在打字稿中編寫實用程序應用程序(控制檯應用程序來查看數據)。

class SomeConsoleApp{ 
    constructor(svc:SomeService){} 
    ... 
    run(){ 
     console.log('test'); 
    } 
} 

var svc = new SomeService(???); 
var app = new SomeConsoleApp(svc); 
app.run(); 

我的問題是,我怎麼能初始化參數的Http當我初始化SomeService。 angular2 Http有兩個參數 - ConnectionBackend和RequestOptions。有點像窮人的依賴注入。

+0

您可以嘗試'injector.get(「SomeService」)''。 –

+0

注射器是什麼模塊? – alltej

+0

每個組件都有自己的注射器。你正在尋找一個注入器來註冊你的服務,所以我猜測它是根節點 - 應用程序模塊。 –

回答

0

如果您想在Angular應用程序之外使用根注入器,則需要在引導模塊時保留對其的引用。

platformBrowserDynamic().bootstrapModule(AppModule).then((moduleRef: NgModuleRef<any>) => { 
    someGlobalObject = moduleRef.injector; 
}); 

然後你可以用注射器,連同所有的依賴創造新的服務:

var svc = someGlobalObject.inject("SomeService"); 

注意:如果您的控制檯應用程序和角度的應用在同一個執行上下文中運行才能做到這一點(相同的頁面)。

+0

我將使用ts-node來運行TS文件。 – alltej

+0

那麼,你需要在某處引導Angular應用程序,請在你的類聲明之前嘗試。我可以建議使用實際單元測試而不是控制檯來測試行爲嗎? –

+0

我也想過測試方法。對我的用法來說,它更像是一種實用工具。 TS文件與角度應用程序駐留在同一個項目中。 – alltej

相關問題