Angular2.3 自定义库和依赖注入

Posted

技术标签:

【中文标题】Angular2.3 自定义库和依赖注入【英文标题】:Angular2.3 Custom Library and dependency injection 【发布时间】:2017-05-04 19:48:45 【问题描述】:

我正在尝试将使用 yeoman 创建的自定义库中的服务注入到我现有的 ionic2 项目中。 lib 的 index.ts(将作为 npm 模块安装):

@NgModule(
    imports: [
        CommonModule
    ],
    declarations: [
        SampleComponent,
        SampleDirective,
    ],
    exports: [
        SampleComponent,
        SampleDirective,
        SamplePipe
    ]
)
export default class SampleModule 
    static forRoot(): ModuleWithProviders 
        return 
            ngModule: SampleModule,
            providers: [SampleService, SettingsSVC]
         ;
    

在我的 ionic2 应用程序中,我想注入 SettingsSVC 和 module.ts。如果我将它添加到 app.module 的 imports-Section 中,它会说:

模块“AppModule”导入的意外值“SettingsSVC”

如果没有,我会收到控制台错误“未找到提供程序”。

类型(无论@Injectable 的类)本身被识别和链接,如果我将相同的类添加到我的 Ionic2 应用程序及其模块中的提供程序部分,它正在使用注入。

关于如何使它工作的任何建议?

【问题讨论】:

【参考方案1】:

当它显示出意外值时,通常意味着您正在导入的内容未成功导入。

要么:

1- SettingsSVC 的路径错误

2- SettingsSVC 名称错误

3- 路径正确但 SettingsSVC 未导出

因此,为了确保您的导入实际上是导入 SettingsSVC ,请在其后放置一个 console.log 并将其注销

import SettingsSVC from 'the/path/'

console.log('SettingsSVC',SettingsSVC);

如果日志显示 undefined ,它肯定是上述之一(或者可能是类似的)。

顺便说一句,我有点困惑,您是想将 SettingsSVC 作为服务导入并将其放入您的提供程序中,还是要将其作为模块导入并放入 import:[] 中?

你不能两者兼得!

【讨论】:

【参考方案2】:

试试这个,

@NgModule(
  imports: [SampleModule.forRoot()],
  declaretions: [],
  providers: []
)
export class YourAppModule 

【讨论】:

以上是关于Angular2.3 自定义库和依赖注入的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2.3 组件继承和依赖注入

使用自定义 Doctrine 2 数据类型的依赖注入

asp.net core自定义依赖注入容器,替换自带容器

使用自定义 Doctrine 2 hydrator 进行依赖注入

自定义容器,利用依赖注入创建对象

在自定义验证器指令中注入 ngControl,导致循环依赖