如何在Angular 2中参数化可注入服务

如何在Angular 2中参数化可注入服务,angular,typescript,Angular,Typescript,我有一个作为框架核心的服务,我们将被纳入许多项目。它使用当前静态的密钥将一些数据保存到本地存储器。我希望将密钥作为参数传递,以便它对于每个项目都是唯一的。这是因为当我从localhost:4200对这些项目中的任何一个进行测试时,都会与本地存储字段/键发生冲突。我得到的是: @Injectable() export class MyService { private static readonly STORAGE_ID = 'model-data'; constructor( )

我有一个作为框架核心的服务,我们将被纳入许多项目。它使用当前静态的密钥将一些数据保存到本地存储器。我希望将密钥作为参数传递,以便它对于每个项目都是唯一的。这是因为当我从
localhost:4200
对这些项目中的任何一个进行测试时,都会与本地存储字段/键发生冲突。我得到的是:

@Injectable()
export class MyService {

private static readonly STORAGE_ID = 'model-data';

     constructor(  ) {

    }

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

}

如何将参数添加到构造函数中,使其仍然可以通过Angular 2依赖项注入进行实例化?

您可以为密钥提供构造函数参数:

export const STORAGE_KEY=new InjectionToken('storageKey');
@可注射()
导出类MyService{
构造函数(@Inject(STORAGE_KEY)private-storageKey:string){}
...
}
然后在
提供程序中
需要为其提供一个值:

提供者:[
{provide:STORAGE_KEY,useValue:'this app KEY'},
我的服务,
...
]
给出了一个实例


或者,创建工厂提供程序函数:

导出函数createServiceFactory(storageKey:string){
return()=>newmyservice(storageKey);
}
并使用:

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

这样,您就不需要注入参数。

您可以为密钥提供构造函数参数:

export const STORAGE_KEY=new InjectionToken('storageKey');
@可注射()
导出类MyService{
构造函数(@Inject(STORAGE_KEY)private-storageKey:string){}
...
}
然后在
提供程序中
需要为其提供一个值:

提供者:[
{provide:STORAGE_KEY,useValue:'this app KEY'},
我的服务,
...
]
给出了一个实例


或者,创建工厂提供程序函数:

导出函数createServiceFactory(storageKey:string){
return()=>newmyservice(storageKey);
}
并使用:

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

这样,您就不需要
@注入
参数。

如果您提供一个具体的代码示例,会更容易。只需添加一个构造函数参数并为其注册一些提供程序。@Günter Zöchbauer,“添加一个构造函数参数并为其注册一些提供程序。”我不清楚这意味着什么。我想这至少和你的问题一样清楚;-)对于抽象问题,请给出抽象答案:p@Günter Zöchbauer,我用一个具体的例子更新了我的问题。如果你能提供一个具体的代码例子,那会更容易。只需添加一个构造函数参数并为其注册一些提供程序。@Günter Zöchbauer,“添加一个构造函数参数并为其注册一些提供程序。”我不清楚这意味着什么。我想这至少和你的问题一样清楚;-)对于抽象问题,请给出抽象答案:p@Günter Zöchbauer,我用一个具体的例子更新了我的问题。