我有很多并不总是静态值(口号,横幅,描述...)和部分视图(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