我正在尝试使用依赖注入(Dependency Injection)与MVP模式,在构造函数中注入所需的依赖项。问题在于,如果我将依赖注入应用于根MainWindowPresenter,则所有子Presenter、它们的子Presenter、视图和服务都会在启动时被加载。由于所有内容都是直接或间接地从MainWindowPresenter加载的,这意味着整个应用程序将在启动时全部加载到内存中。
我知道在.NET中创建所有对象可能不会花费太多,但我无法不考虑它们永远不会同时被使用时的内存浪费。例如AboutPresenter或HelpPresenter可能根本不会被使用。我有遗漏吗?或这就是依赖注入应该工作的方式?有没有解决这个问题的方法?
我唯一找到的解决办法是使用工厂,以便在需要时创建子Presenter/视图/服务。例如:
我知道在.NET中创建所有对象可能不会花费太多,但我无法不考虑它们永远不会同时被使用时的内存浪费。例如AboutPresenter或HelpPresenter可能根本不会被使用。我有遗漏吗?或这就是依赖注入应该工作的方式?有没有解决这个问题的方法?
我唯一找到的解决办法是使用工厂,以便在需要时创建子Presenter/视图/服务。例如:
class HelpFactory : AbstractHelpFactory
{
public IHelpPresenter Create()
{
IHelpService helpService = new ConcreteHelpService();
IHelpView helpView = new ConcreteHelpView();
HelpSearchPresenter searchPresenter = HelpSearchFactory.Create();
return HelpPresenter(helpView, helpService, searchPresenter);
}
}
这基本上与工厂依赖子工厂的情况相同,但至少它们比presenters/views/services更轻,并且在需要之前不需要加载子工厂。