【发布时间】:2019-02-21 10:30:34
【问题描述】:
我有一个包含 2 个组件和 2 个服务 A 和 B 的库。
其中 2 个组件正在使用我的服务 A.. 没问题 - 我可以看到 A 已创建一次 - 我已写信给 ctor 中的 console。
服务 B 需要服务 A 来完成他的工作,因此它会注入 A。现在我看到 A 的另一个创建(在控制台中)
服务B在做,和组件做的一样。
import { A } from './A'
.
.
.
constructor(private myA: A) {...}
但这一次它再次创建了我的服务 A。所以我有 2 个实例。
这对我不好..也很奇怪.. 我在新一代的 Angular 中相对较新 - 一直在为这样的小事情而苦苦挣扎。这令人沮丧。
有人吗?
更新
我已经意识到,当我的客户应用程序延迟加载子模块并在那里导入我的模块时,就会发生这种情况..
例如。
partials.modules.ts
@NgModule({ declarations: [..],exports: [...], imports: [ ..., MyModule ]});
export class PartialsModule {}
pages.module.ts -- 路由懒加载
@NgModule({ declarations: [..],exports: [...], imports: [ ..., PartialsModule ]});
export class PagesModule {}
app.module.ts
@NgModule({ declarations: [..],exports: [...], imports: [ ..., PartialsModule ]});
export class AppModule {}
app 模块正在创建 MyMoudle->my 服务的实例,PagesModule 也是如此。我猜这是因为惰性模块有自己的注入器。
但是我该如何解决呢?
我已尝试使用 forRoot 静态方法将我的模块导入移动到 app.module.ts,如 here 所述。现在partialModule中的组件找不到MyModule(我的库)中的组件
:(
【问题讨论】:
-
用
@Injectable({ providedIn: 'root' })装饰服务A -
我所有的服务都注入了这个。只要我们从其他组件中使用它,该服务就会运行良好。当我从另一个服务中使用它时,它就会发生。然后其他服务创建它..
-
它是添加到提供者列表中的任何地方还是只是给了上面的装饰器?
-
我已经在 5 天前发布了它,让它休息一下。现在我再次与您核对,它看起来像我想要的和预期的那样创建了一次服务.. 啊。 ..这个新的角度!无论如何,我想我会在我确认它连续工作几天后很快删除这篇文章:)
-
幸好我没有删除帖子..检查更新
标签: angular dependency-injection