我做了角落飞镖教程,我有一个问题.
要声明可用于依赖注入的类型,我必须这样做:
class MyAppModule extends Module { MyAppModule() { type(RecipeBookController); } }
所有类型都是如此.
在一个大型应用程序中,您可以拥有数百种类型,因此声明所有类型是一种奇怪的方式.
有没有其他方法可以做到这一点?
谢谢.
解决方法
您可以使用反射来收集类型.如果您需要有关此方法的更多信息,请添加评论(我尽量避免在网络应用中反映).
编辑
反射可能有效,但是当你开始使用特殊情况时,它会很快变得难以理解.
当您使用DI时,您经常遇到类的构造函数需要InterfaceX类型的对象并且您想要指定实际应该注入满足要求的哪些类(实现接口)的情况.然后你开始用反射编写特殊情况.
使用类型(InterfaceX,implementedBy:Y);总是超级可读.
编辑结束
我不知道你是否认为这是改进,但我们做了什么(我在几个项目中看到过)
创建更多模块并使用install将它们添加到MyAppModule
例如见
– https://github.com/akserg/angular.dart.ui/blob/master/lib/accordion/accordion.dart
– https://github.com/akserg/angular.dart.ui/blob/master/lib/angular_ui.dart
accordion.dart
class AccordionModule extends Module { AccordionModule() { type(AccordionComponent); type(AccordionheadingComponent); type(AccordionGroupComponent); value(AccordionConfig,new AccordionConfig()); } }
angular_ui.dart
class AngularUIModule extends Module { AngularUIModule() { install(new AlertModule()); install(new AccordionModule()); // the above module install(new ButtonModule()); install(new CarouselModule()); install(new CollapseModule()); install(new DropdownToggleModule()); install(new ProgressbarModule()); install(new ratingModule()); install(new TabsModule()); install(new TimeoutModule()); install(new TransitionModule()); install(new ModalModule()); } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。