当我们将它作为参数传递给组件构造函数
时,为什么要在提供者中声明服务名称Unexpected error while executing: am start -n "com.example.maomei.passusersystem/com.example.maomei.passusersystem.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -D
Error while Launching activity
从上面开始,如果我们在构造函数中传递相同的内容,为什么要在提供者中声明xComponent。不是那种不情愿。
答案 0 :(得分:3)
因为提供和注射是两回事。
提供指定服务实例的创建位置和方式。
注入是指定一个构造函数参数,其中需要传入服务(或其他可注入的)实例。
答案 1 :(得分:0)
providers
你是什么意思?它是@Component
提供商还是@NgModule
提供商?
如果@Component
,则不再需要它,如果你对构造函数参数使用@Inject
注释(我很确定它在测试版中是必需的,但是在发布之后它很快被删除了)。但是,仍然可以在少数特殊情况下使用该方法(例如,如果您需要动态依赖,那么您可以获得Injector
的本地实例,其中包含providers
中列出的服务/类,但是绝对不是你的情况。或者你可以列出所有需要提供的服务并删除@Inject
注释。但你仍然可以通过互联网找到大量过时的例子。
如果@NgModule
- 仍然需要 - 这是Injector
获取DI可用类列表的入口点。如果您未在此处提供服务,则无法通过@Inject