gpt4 book ai didi

带接口(interface)的 Angular 6 服务

转载 作者:太空狗 更新时间:2023-10-29 17:13:41 25 4
gpt4 key购买 nike

我正在使用 Angular (6.0.7) 构建一个应用程序,我正在尝试使用新的创建服务:

@Injectable({
providedIn: 'root'
})

但是我怎样才能使用接口(interface)输入注入(inject)呢?


问题

我有 2 个服务,Authentication.serviceSessionStorage.service。我想将 session 存储注入(inject)身份验证服务。这可以通过以下方式完成:

constructor(private sessionStorage: SessionStorage) {
}

没问题。但是出于面向对象的目的,我希望在此服务之上有一个接口(interface)(这样我就可以将本地存储服务实现为 session 存储服务)。因此,我想使用接口(interface)键入注入(inject)的类是合乎逻辑的,但这不能以与 Angular 5 and lower does it 相同的方式完成。

那么我如何使用我的界面将注入(inject)类型注入(inject)到这个全局服务中呢?


我试过了

Angular 服务类型描述了一个 InjectableProvider,但这与 InjectableProvider 的兄弟项的任何参数都不匹配,因此这会导致编译器(和 tslint)错误.

@Injectable({
providedIn: 'root'
}, {provide: IStorageService, useClass: SessionStorage})

最佳答案

这可以通过 InjectionToken 来完成,它替代了过时的 OpaqueToken

export const AuthenticationProvider = new InjectionToken(
"AuthenticationProvider",
{ providedIn: "root", factory: () => new CognitoAuthenticationProvider() }
);

...

@Injectable()
export class CognitoAuthenticationProvider implements IAuthenticationProvider {

...

@Injectable({
providedIn: "root"
})
export class AuthenticationService {
constructor(
@Inject(AuthenticationProvider)
private authenticationProvider: IAuthenticationProvider,
private http: HttpClient
) {}

关于带接口(interface)的 Angular 6 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51174859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com