必要な依存関係をコンストラクターに注入する 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);
}
}
これは基本的にファクトリーがサブファクトリーに依存するのと同じことですが、少なくともそれらはプレゼンター/ビュー/サービスよりも軽量であり、必要になるまでサブファクトリーをロードする必要はありません。