我正在尝试将依赖注入与 MVP 一起使用,将所需的依赖注入到构造函数中。我遇到的问题是,如果我在根 MainWindowPresenter 上使用依赖注入,它的所有子演示者及其子演示者、视图和服务都将在启动时加载。由于所有内容都是从 MainWindowPresenter 直接或间接加载的,这意味着整个应用程序将在启动时加载到内存中。
我知道在 .NET 中在启动时创建所有对象可能不会花费很多,但我不禁认为这是浪费内存,因为它们永远不会同时使用。有一些像 AboutPresenter 或 HelpPresenter 可能永远不会使用。我错过了还是依赖注入应该如何工作?有没有解决的办法?
我能找到解决这个问题的唯一方法是使用工厂,然后可以在需要时创建子演示者/视图/服务。例如:
class HelpFactory : AbstractHelpFactory
{
public IHelpPresenter Create()
{
IHelpService helpService = new ConcreteHelpService();
IHelpView helpView = new ConcreteHelpView();
HelpSearchPresenter searchPresenter = HelpSearchFactory.Create();
return HelpPresenter(helpView, helpService, searchPresenter);
}
}
这与工厂依赖子工厂基本相同,但至少它们比演示者/视图/服务更轻,并且在需要之前不需要加载子工厂。