Angular 2 - 如何将依赖项注入自定义类,该类不是组件且不作为服务公开

zii*_*zii 7 typescript angular

我们在这里使用TypeScript和Angular 2编写的相当大规模的应用程序,我有一个主要问题,了解如何以自定义方式使用Angular 2注入器.实际上我不确定我是不是想尝试做一些不是框架意图的事情,但到目前为止,我发现只有不好的解决办法才能做到...

所以,我想要做到的,是从喷油器适用值,未纳入@Component行为,并且不暴露喷油器的服务,映射到全球或组件级别注射器类.(我想我很清楚如何在这两个范围中注入东西并且工作得很好).

我正在尝试的是这样的事情:

export class SomeCustomClass {
    constructor(injection:InjectionToken) {
        console.log('injection', injection);
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道如果我将这个类添加到bootstrap中的注入器中,或者作为@component装饰器的一部分,它会很好用.问题是,这不是我打算做的.

我需要的是:

factory.createInstanceWithInjectionApplied(SomeCustomClass);
Run Code Online (Sandbox Code Playgroud)

我实际上可以忍受简单:

var instance:SomeCustomClass = new SomeCustomClass();
Run Code Online (Sandbox Code Playgroud)

但这似乎并不现实.

哦,是的,我已经尝试了我能想到的一切 - @Injectable()对这样创建的实例什么都不做,Injector.createAndResolve似乎也不起作用并保持一定的静态属性,可以访问应用程序Injector不看起来也是一个好主意.

提前致谢!

Thi*_*ier 0

你尝试使用该类吗Injector

这是一个示例:

var injector = Injector.resolveAndCreate([Car, Engine]);
var car = injector.get(Car);
Run Code Online (Sandbox Code Playgroud)

和另一个:

export class SomeCustomClass {
  constructor(injector:Injector) {
    (...)
  }
}
Run Code Online (Sandbox Code Playgroud)