【问题标题】:Do inject new instance Angular注入新实例 Angular
【发布时间】:2018-08-28 14:03:04
【问题描述】:

我有一个简单的工厂和一个注入令牌,我在 Angular 依赖注入中使用如下:

const TOKEN = new InjectionToken<EventEmitter<MyType>>("Create p");

和工厂:

const createEventEmitter = () => new EventEmitter<MyType>();

现在我在我的模块中提供它,如下所示:

providers: [
 {provide: TOKEN, useFactory: createEventEmitter}]

我将它注入到一些构造函数中:

constructor(@Inject(TOKEN) emitter: EventEmitter<MyType>)

这行得通。但是,我确实得到了一个单例实例。

如果我想像工厂模式一样执行此操作,以便在注入引用时获得一个新实例,该怎么办?这可能吗?有点像 Spring 的@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE).

额外问题:是否可以创建一个注入器令牌来注入具有泛型类型参数的类的新实例?所以一个注入器令牌注入所有 EventEmitter。

【问题讨论】:

    标签: angular


    【解决方案1】:

    如果您在app.module 上提供,则关键是您提供的模块,它将是一个单例,但如果您在自定义组件中提供,您将拥有相同数量的实例组件和注入类。

    @Component({
      selector: 'custom',
      templateUrl: './custom.component.html',
      styleUrls: ['./custom.component.scss'],
      provider:[{provide: TOKEN, useFactory: createEventEmitter}]
    })
    

    如果你有一个子模块,你也可以这样做。

    【讨论】:

    • 我现在就这样做。它有效,但有点麻烦,因为我需要一遍又一遍地重复相同的行。这是推荐的吗?还是建议构建一个具有工厂方法的服务,然后我可以在我的组件中调用这些方法?
    • 是的,我将其用作服务。
    • 您的问题找到解决方案了吗?
    • 我现在在组件级别上做。但是,我仍在尝试找出更好的方法。虽然工厂服务提供了很大的灵活性,但它也不是一个理想的解决方案。
    • 这方面有更新吗?也在寻找类似的东西。
    猜你喜欢
    • 2016-10-23
    • 2019-02-10
    • 2021-02-04
    • 2015-04-06
    • 2021-02-04
    • 2019-11-23
    • 2017-03-28
    • 2016-07-27
    • 1970-01-01
    相关资源
    最近更新 更多