Beispiel #1
0
        public ApplicationController(ILoginPresenter loginFormPresenter, IMessageService messageService,
                                     DatabaseContext dbContext, IMainPresenter mainFormPresenter)
        {
            MessageService = messageService;
            Context        = dbContext;

            LoginFormPresenter = loginFormPresenter;
            LoginFormPresenter.OnPresenterClosed += (Tuple <LoginAttemptResult, Employee> obj) =>
            {
                try
                {
                    LoginAttemptResult = obj.Item1;
                    if (LoginAttemptResult == LoginResults.Success)
                    {
                        User = new User(Context, obj.Item2);
                    }
                }
                catch (Exception e)
                {
                    MessageService.
                    ShowError(e.Message + " Программа не может продолжать свою работу.");
                    Environment.Exit(0);
                }
            };

            MainFormPresenter = mainFormPresenter;
            MainFormPresenter.PresenterClosed    += (reloginAttempt) => this.reloginAttempt = reloginAttempt;
            MainFormPresenter.EntityTypeReceived += (type) =>
            {
                var tablePresenter = (ITablePresenter)Scope.Resolve(type);
                tablePresenter.FormClosed += (entityType) => MainFormPresenter.EnableButtAfterFormClosure(entityType);

                tablePresenter.FillingRequired += (user, model, fillingType, presenterType) =>
                {
                    var fillingPresenter = (IFillingPresenter)Scope.Resolve(presenterType);
                    fillingPresenter.FillingCompleted += (fillType) => tablePresenter.ApplyFilling(fillingType);
                    fillingPresenter.Run(user, model, fillingType);
                    fillingPresenter.PresenterClosure += () => tablePresenter.EnableFormsButts();
                };

                tablePresenter.RequestSearchCriteria += (entityType) =>
                {
                    var searchPresenter = Scope.Resolve <ISearchPresenter>();

                    searchPresenter.ReturnSearchCriteria += (searchBy, searchValue) =>
                                                            tablePresenter.ApplySearchCriteria(searchBy, searchValue);
                    searchPresenter.PresenterClosure += () => tablePresenter.EnableFormsButts();

                    searchPresenter.Run(entityType);
                };

                tablePresenter.Run(User);
            };
            MainFormPresenter.InfoRequired += (infoType) => Scope.Resolve <IInfoPresenter>().Run(infoType);
        }