public ActionResult SelectSource()
 {
     Session["Context"] = new TransferMoneyContext();
     return View(new SelectAccountVm
                     {
                         SelectedAccountId = string.Empty,
                         Accounts = accountRepo.Accounts
                     });
 }
        public ActionResult Index(FormCollection form)
        {
            var sourceAccountId = form["SourceAccounts"];
            var destinationAccountId = form["DestinationAccounts"];
            var amount = form["Amount"];

            var sourceAccount = accountRepo.GetById(int.Parse(sourceAccountId));
            var destinationAccount = accountRepo.GetById(int.Parse(destinationAccountId));

            var ctx = new TransferMoneyContext(sourceAccount as TransferMoneySource, 
                destinationAccount as TransferMoneySink, 
                decimal.Parse(amount));
            ctx.Execute();

            return ResultPage(ctx);
        }
 private ActionResult ResultPage(TransferMoneyContext ctx)
 {
     ViewData["Amount"] = ctx.Amount;
     ViewData["Source"] = ((Account)ctx.Source).Name;
     ViewData["Destination"] = ((Account)ctx.Sink).Name;
     return View("Result");
 }