Fab*_*ian 7 dependency-injection guice
我相信这些问题已经以某种方式或其他方式提出,但我还没有得到它.
我们做了一个GWT项目,我的项目负责人不允许使用GIN/Guice作为DI框架(新的程序员不会理解它,他认为)所以我尝试手动执行DI.
现在我遇到了深度对象图的问题.UI中的对象层次结构如下所示:
AppPresenter-> DashboardPresenter-> GadgetPresenter-> GadgetConfigPresenter
对象层次结构树中的GadgetConfigPresenter方式有一些依赖项,如CustomerRepository,ProjectRepository,MandatorRepository等.
因此,创建GadgetConfigPresenter的GadgetPresenter也具有这些依赖关系,依此类推,直到创建AppPresenter的应用程序的入口点.
Mar*_*ann 10
你写的那个
GadgetPresenter创建GadgetConfigPresenter [.]
而不是直接创建GadgetConfigPresenter实例,GadgetPresenter应该依赖于可以为其创建GadgetConfigPresenter实例的抽象工厂.这推动GadgetConfigPresenter了工厂的内在依赖性.
一直使用构造函数注入,你的穷人的DI布线应该看起来像这样(对于C#语法道歉):
var customerRepository = new CustomerRepository(/*...*/);
var projectRepository = new ProjectRepository(/*...*/);
var mandatorRepository = new MandatorRepository(/*...*/);
var gadgetConfigPresenterFactory =
new GadgetConfigPresenterFactory(
customerRepository,
projectRepository,
mandatorRepository);
var gadgetPresenter = new GadgetPresenter(gadgetConfigPresenterFactory);
var dashboardPresenter = new DashboardPresenter(gadgetPresenter);
var appPresenter = new AppPresenter(dashboardPresenter);
Run Code Online (Sandbox Code Playgroud)
请注意我们如何经常打破依赖关系链,确保每个使用者的依赖关系数量永远不会变得太大.
原则上,这意味着您必须在引导时创建所有依赖项,除非您实现延迟加载策略.
管理生命周期这样的事情正是DI容器非常有用的东西,但完全可以通过遵循DI模式和原则来编写整个应用程序.
总而言之,如果可能的话,我仍然会推荐一个DI容器.
| 归档时间: |
|
| 查看次数: |
1793 次 |
| 最近记录: |