我有很多並不總是靜態值(口號,橫幅,描述...)和部分視圖(block_head,block_footer,block_right),我應該在那裏顯示它。所以,我需要在每次操作中將這些值的大集合傳遞給Partial,這對我來說不是很好。在構造函數中使用參數實現控制器
我在這裏找到有趣的解決方案:http://www.asp.net/mvc/tutorials/passing-data-to-view-master-pages-cs,部分是「良好的解決方案」。我可以在ApplicationController中移動這些值的所有初始化,並從我的控制器實現它。
但是,我想繼續在ApplicationController中初始化我的接口:)如果我能做到這一點,我認爲它應該是太棒了。我使用Ninject,所以,一些代碼:
public abstract class ApplicationController : Controller
{
//
// GET: /Application/
private readonly IModuleRepository _moduleRepository;
public IModuleRepository moduleRepository
{
get { return _moduleRepository; }
}
public ApplicationController(IModuleRepository moduleRepository)
{
_moduleRepository = moduleRepository;
foreach (var module in _moduleRepository.GetAllModules())
ViewData[module.name] = module.value;
}
}
實現:
public class HomeController : ApplicationController
{
//I can use here moduleRepository without HomeController initialization
}
只是一個問題,我不知道如何實現ApplicationController中,如果有爭論。這是不錯的方式,它是我的問題的任何解決方案?將來我要設置5-7個接口,並且有大約10-15個控制器,所以在ApplicationController和Implement中可以很好地初始化它們。 Thx,抱歉,如果問題很愚蠢。
好了,並說:
現在,如果我有10個接口,它應該是這樣的:
public class HomeController
{
private IModuleRepository _moduleRepository;
private IBookRepository _bookRepository;
private ITableRepository _tableRepository;
private IClassRepository _classRepository;
private IRoomRepository _roomRepository;
private IUserRepository _userRepository;
private IWindowRepository _windowRepository;
private IChairRepository _chairRepository;
private IDoorRepository _doorRepository;
private IWCRepository _wcRepository;
public HomeController(IModuleRepository moduleRepository, IBookRepository bookRepository, ITableRepository tableRepository, IClassRepository classRepository, IRoomRepository roomRepository, IUserRepository userRepository, IWindowRepository windowRepository, IChairRepository chairRepository, IDoorRepository doorRepository, IWCRepository wcRepository)
{
_moduleRepository = moduleRepository;
_bookRepository = bookRepository;
_tableRepository = tableRepository;
_classRepository = classRepository;
_roomRepository = roomRepository;
_userRepository = userRepository;
_windowRepository = windowRepository;
_chairRepository = chairRepository;
_doorRepository = doorRepository;
_wcRepository = wcRepository;
}
public ActionResult Index()
{
ViewBag.Windows = _windowRepository.GetAllWindows();
ViewBag.Doors = _doorRepository.GetAllDoors();
// e.t.c.
return View();
}
}
,我已經在我的每個控制器的初始化這個地方我需要使用這個版本庫(Home,Admin,...)。
所以,如果我能做出這樣的事情:
public class HomeController : ApplicationController
{
public ActionResult Index()
{
ViewBag.Windows = windowRepository.GetAllWindows();
ViewBag.Doors = doorRepository.GetAllDoors();
return View();
}
}
和初始化這裏只是一個時間:
public abstract class ApplicationController : Controller
{
public ApplicationController(IModuleRepository moduleRepository, IBookRepository bookRepository, ITableRepository tableRepository, IClassRepository classRepository, IRoomRepository roomRepository, IUserRepository userRepository, IWindowRepository windowRepository, IChairRepository chairRepository, IDoorRepository doorRepository, IWCRepository wcRepository)
{
// Initialize repositories just one time here
}
}
它可能是很好的,但我需要通過在構造函數的參數的實施類
不,這不是我想要做的。 – FSou1 2011-03-08 11:40:36
我很抱歉誤解你的問題,你可能需要澄清一下你的問題,以獲得更好的答案。 – 2011-03-08 11:44:19
已更新第一條消息 – FSou1 2011-03-08 12:17:05