在Angular 2中注入内置JavaScript类

在Angular 2中注入内置JavaScript类,javascript,angular,web-audio-api,angular2-services,Javascript,Angular,Web Audio Api,Angular2 Services,我试图创建一个内置在JavaScript中的类,可以在Angular 2应用程序中注入。对于我的特定用例,我尝试注入一个实例。我试着用以下4种方法使其可注射,但没有一种有效 @NgModule({ providers: [ AudioContext //{provide: AudioContext, useClass: AudioContext} //{provide: AudioContext, useValue: new AudioCo

我试图创建一个内置在JavaScript中的类,可以在Angular 2应用程序中注入。对于我的特定用例,我尝试注入一个实例。我试着用以下4种方法使其可注射,但没有一种有效

@NgModule({
    providers: [
        AudioContext
        //{provide: AudioContext, useClass: AudioContext}
        //{provide: AudioContext, useValue: new AudioContext()}
        //{provide: AudioContext, useFactory: () => new AudioContext()}
    ]
})

export class AppModule {

}
我得到了错误

静态解析符号值时遇到错误。不能 解析类型AudioContext(原始.ts文件中的位置13:39)


如何使
AudioContext
的实例在我的应用程序中可注入,而无需将其包装到自定义服务中?

全局窗口对象“作为提供程序注入窗口对象”中提供了音频上下文

var AudioContext=window.AudioContext | | window.webkitadiocontext


然后,您可以通过注入的窗口对象访问AudioContext。

我想注入AudioContext的实例,而不是类不要注入窗口,这是一个糟糕的想法。@AluanHaddad注入窗口不是一个糟糕的想法,使用全局对象并将所有内容附加到它。欢迎你有意见分歧。Rob创建一个封装AudioContext的提供者,然后将其设置为提供者。如果可能的话,我希望避免创建封装AudioContext的自定义服务。不可能直接注入AudioContext吗?不可能,因为AudioContext不是Angular提供的Angular模块或提供程序。把它包装起来就是让它成为一个Angular模块,Angular可以理解并可以用于注入。你在使用AOT吗?是的,我在使用AOT。我认为你必须做一些非常愚蠢的事情,比如创建一个文件,比如
audioContext.ts
,其中包含
export const audioContext=new audioContext()
然后将其导入到您的模块中。@AluanHaddad听起来好像可以工作。虽然如果像这样的对象没有通过Angular的DINo,那么单元测试可能会变得很棘手,但它仍然会来自DI,您可以将它放在providers数组中。AOT编译器完全是呆头呆脑的,不理解函数之类的基本概念。