0

我正在尝试实现基本控制器、应用程序服务、存储库设计。我是这个级别的 OO 设计的新手,但已经完成了它。剩下的障碍是如何处理扩展我的基本控制器。

我的目标:

  1. 有一个可以独立存在的基本控制器......即您可以从它继承一个特定的控制器,但它本身是空的并让它工作。
  2. 在我需要扩展基本控制器的情况下,可以在特定控制器中这样做。

这是我所拥有的:

基本控制器:

public class BaseControllerSingle<TRepository, TViewModelSingle> : BaseController
...
// GET: /InventoryMgmt/ManageItems/Edit/5
        public virtual ActionResult Edit( 
            int id = 0,
            string pageTitleNoun = "",
            Expression<Func<TRepository, bool>> predicate = null
        )
        {
            TViewModelSingle viewModelSingle = new TViewModelSingle();

            ViewBag.Mode = "EDIT";

            if (id == 0) //Add new company mode
            {
                viewModelSingle = _baseAppServSingle.CreateNewViewModel(CurrentUserId);
                ViewBag.Header = "Create New " + pageTitleNoun;
                ViewBag.Mode = "NEW";
                return View(viewModelSingle);
            }

            //else edit existing record mode
            viewModelSingle = _baseAppServSingle.CreateEditViewModel(id, predicate);
            ViewBag.Header = "Edit " + pageTitleNoun;

            return View(viewModelSingle);
        }

还有我的特定控制器。请注意这里的代码是不正确的(特别是“ItemViewModel viewModel = actionResult(ItemViewModel);”......但试图展示我正在尝试的内容,这本质上是从操作结果中提取视图模型,进一步操作它,然后返回它。

public class ManageItemsController : BaseController
...
// GET: /InventoryMgmt/ManageItems/Edit/5
        public ActionResult Edit(int id = 0)
        {
            ActionResult actionResult = GetBaseControllerSingle().Edit(
                "Material", 
                id, 
                x => x.Id == id && x.CompanyId == CurrentCompanyId);

            ItemViewModel viewModel = actionResult(ItemViewModel);
            if (id == 0)
            {
                viewModel = _manageItemsAppServ.CreateNewViewModel(viewModel, CurrentCompanyId);
            }

            viewModel.DDLOptions = _manageItemsAppServ.CreateFilterOptionsViewModel(CurrentCompanyId);
            return View(viewModel);
        }
4

1 回答 1

0

我决定重写一些代码来消除这种必要性。我想也许它可以用 Ninject 来完成……但这不是我现在想要做的事情

于 2013-01-16T21:57:23.943 回答