Angular 将注入的服务引用和可观测值传递给依赖注入之外的普通类
我继承了一个angular项目,其中使用普通javascript对象模拟java风格的实体实例 这就是伪注入的实现方式:Angular 将注入的服务引用和可观测值传递给依赖注入之外的普通类,angular,dependency-injection,Angular,Dependency Injection,我继承了一个angular项目,其中使用普通javascript对象模拟java风格的实体实例 这就是伪注入的实现方式: export class MyEntity { private http: Http; private someObservable: Observable<any>; init(dependencies, ...) { this.http = dependencies.http; this.someObservable = dep
export class MyEntity {
private http: Http;
private someObservable: Observable<any>;
init(dependencies, ...) {
this.http = dependencies.http;
this.someObservable = dependencies.someObservable;
this.someObservable.subscribe((res) => { ...unimportant logic... });
}
}
我的问题是:
serviceheloper
类,它有http:HttpClient
作为一个参数,从@可注入的类调用,它工作得很好。简化示例:
export class ServiceHelperCrl<T> {
constructor(private http: HttpClient) {
}
get(id: number): Observable<T> {
return this.http.get<T>('/some/rest/resource/path'+`/${id}`);
}
}
导出类服务helpercrl{
构造函数(专用http:HttpClient){
}
get(id:number):可观察{
返回这个.http.get('/some/rest/resource/path'+`/${id}`);
}
}
2) 我不知道为什么在您的示例中有一个作为参数传递的可观察的
,或者需要发布哪些订阅
a) 最终,一个简单的解决方案可能是在Java风格的类中实现定制的ondestory()
方法,并从实现ondestory
的托管类中调用它。
这里有一个退订示例:
b) 或者您将java样式的类转换为一个@Injectable
类(但可能需要更大的努力)最后我这样解决了它,一个静态类,在应用模块初始化期间获取对注入器的引用:
export class GlobalInjector {
static injector: Injector;
}
。。。在app.module中或任何足够快的地方:
export class AppModule {
constructor (private injector: Injector) {
GlobalInjector.injector = injector;
}
}
可以像这样在普通类中使用(MyService是一个可注入的服务类):
对于删除订阅,我还没有找到不需要手动销毁呼叫的好解决方案。谢谢!关于2。当某些数据需要在线同步时,它接收来自该可观察对象的发射,然后执行必要的api调用。无论如何,我似乎可以只重构订阅。@不客气!您以何种方式重构订阅?我将它们更改为BehaviorSubjects并仅访问其值。幸运的是,我可以避免触发新排放的代码。
export class AppModule {
constructor (private injector: Injector) {
GlobalInjector.injector = injector;
}
}
myDependency = GlobalInjector.injector.get(MyService);