So on my view I inject my presenter as I need to do this to be able to use my events. My view looks like this:
public partial class ImpositionForm : Form, IImpositionFormView {
private ImpositionFormPresenter presenter;
private readonly ISignatureSizeManager signatureSizeManager;
private readonly ISystemVariablesManager systemVariablesManager;
private readonly string expectedPathToAppSettings = $"{AppDomain.CurrentDomain.BaseDirectory}/PrintAppSettings.txt";
public event EventHandler<EventArgs> SetSheetSizeAcross;
public event EventHandler<EventArgs> SetSheetSizeAround;
public event EventHandler<ErrorEventArgs> Error;
public event EventHandler<EventArgs> ClearPage;
public event EventHandler<EventArgs> SetSignatureSize;
public event EventHandler<EventArgs> ShowSystemVariablesForm;
public ImpositionForm(ImpositionFormPresenter _presenter, ISignatureSizeManager _signatureSizeManager,
ISystemVariablesManager _systemVariablesManager) {
presenter = _presenter;
systemVariablesManager = _systemVariablesManager;
signatureSizeManager = _signatureSizeManager;
InitializeComponent();
}
//Other code
}
And I inject the view when using my constructing my presenter:
public class ImpositionFormPresenter {
private readonly ISignatureSizeManager signatureSizeManager;
private readonly ISystemVariablesManager systemVariablesManager;
private readonly SystemVariablesFormPresenter systemVariablesFormPresenter;
private readonly string pathToAppSettings = $"{AppDomain.CurrentDomain.BaseDirectory}/PrintAppSettings.txt";
private readonly IImpositionFormView view;
public ImpositionFormPresenter(IImpositionFormView _view, ISignatureSizeManager _signatureSizeManager,
ISystemVariablesManager _systemVariablesManager, SystemVariablesFormPresenter _systemVariablesFormPresenter) {
view = _view;
signatureSizeManager = _signatureSizeManager;
systemVariablesManager = _systemVariablesManager;
systemVariablesFormPresenter = _systemVariablesFormPresenter;
InitialiseEvents();
}
private void InitialiseEvents() {
view.SetSheetSizeAcross += SetSheetSizeAcross;
view.SetSheetSizeAround += SetSheetSizeAround;
view.Error += LogErrorToView;
view.SetSignatureSize += SetSignatureSizeValues;
view.ShowSystemVariablesForm += OpenSystemVariablesForm;
}
//Other code
}
This is an issue because I receive a loop where the view relies on the presenter and the presenter relies on the view.
However, I'm not sure how to solve this issue creating new instances of my presenter and view instead of injecting them. Can anyone help me so I can continue using dependency injection?