(问题是关于Typescript和Angular2,我保证;])
我在Symfony2中做了很多使用注释的代码。 在Symfony和Doctrine中,注释是可选的,您可以使用yaml,xml或plain PHP配置实体映射,路由和任何其他内容。
这对于准备要用作单独库的代码很有用。我可以准备我的代码免费symfony,然后我可以创建一个将它与symfony集成的包。如果我不打算在symfony之外使用该代码,我仍然可以使用注释。
然后我开始学习Angular2和TypeScript。有装饰师做任何事情。用于组件元数据,服务,一切的装饰器。
因此,如果我想创建一个可以与我的应用程序一起使用的服务,我必须将其标记为可注射。如果我想准备一个可以用于任何框架的课程,该怎么办?
是否可以单独添加装饰器(以某种理智的方式),这样我就可以向Angular2的DI注入一个外部类。
答案 0 :(得分:1)
事实上,如果你想在课堂上注入一些内容,你需要使用@Injectable
装饰器。这意味着你需要使用一些Angular2,因为你想使用它的依赖注入; - )
如果你不想在其中注入一些内容,你可以在不使用这个装饰器的情况下将类注入其他内容......
有关详细信息,请参阅此问题:
答案 1 :(得分:1)
如果您希望能够注入一个本身具有依赖关系(构造函数参数)但不想要或不能应用@Injectable()
的类,那么您可以使用工厂
bootstrap(AppComponent, [
SomeDep,
provide(SomeType, {useFactory: (dep) => new SomeType(dep),
deps: [SomeDep]})
]);
您可以为此类提供程序创建变量,以便在没有此繁琐声明的情况下轻松重用这些变量(例如HTTP_PROVIDERS
)
export const SOME_TYPE_PROVIDERS: any[] = [
SomeDep,
provide(SomeType, {useFactory: (dep) => new SomeType(dep),
deps: [SomeDep]})
];
然后像
一样使用它bootstrap(AppComponent, [SOME_TYPE_PROVIDERS]);