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 に答える