I working on menu using MVP pattern, so I have 2 singelton presenters. First one is main menu presenter, second is settings menu presenter. First presenter(main menu pres) needs to refernse second (settings pres) and vice versa seconds needs to reference first. Presenters code below:
public class MainMenuPresenter : IPresenter
{
#region FIELDS
private IMenuView menuView;
private IPresenter settingsPresenter;
#endregion
public MainMenuPresenter(IMenuView menuView, IPresenter settingsPresenter)
{
this.menuView = menuView;
this.settingsPresenter = settingsPresenter;
Run();
}
}
public class SettingsMenuPresenter : IPresenter
{
#region FIELDS
private ISettingsView settingsView;
private IPresenter menuPresenter;
#endregion
public SettingsMenuPresenter(ISettingsView settingsView, IPresenter menuPresenter)
{
this.settingsView = settingsView;
this.menuPresenter = menuPresenter;
}
}
When I try to inject them using MonoInstaller and code below, unity throws StackOverflow exeption, as I understand, this is due to the fact that zeinject endlessly creates these two presenters. How to make these two singeltons reference each other?
public class MainMenuInstaller : MonoInstaller
{
public override void InstallBindings()
{
Container.Bind<IPresenter>().To<MainMenuPresenter>()
.WhenInjectedInto(typeof(SettingsMenuPresenter))
.NonLazy();
Container.Bind<IPresenter>().To<SettingsMenuPresenter>()
.WhenInjectedInto(typeof(MainMenuPresenter));
}
}