默认的 MVC 模板使用“@DateTime.Now.Year”来显示版权年份,但我更愿意在任何地方使用 NodaTime。
我目前正在使用 Ninject 将 IClock 的实例注入(inject)到执行时间或日期特定内容的 Controller 中。是否有推荐的方法来访问 MVC 中类似于“DateTime.Now”的“全局 IClock”?我想我可以将 IClock 注入(inject)每个 Controller ,然后将它传递到每个 View ,但有时可以访问全局的东西会很好。
我知道我可以在 Layout 模板中使用 SystemClock.Instance ... 引用一个全局的、可测试的 IClock 会更好。
最佳答案
您可以使用 child action 。
首先编写一个 Controller ,您可以在其中像往常一样使用依赖注入(inject),并且将包含一个子操作:
public class CopyrightController: Controller
{
private readonly IClock clock;
public CopyrightController(IClock clock)
{
this.clock = clock;
}
[ChildActionOnly]
public ActionResult Index()
{
// In this example I am directly passing the IClock instance
// to the partial view as model but in a real application
// you might want to use a view model here
return PartialView(this.clock);
}
}
然后你可以有一个相应的部分 View (
~/Views/Copyright/Index.cshtml
):@model IClock
<div>Copyright ...</div>
最后在您的 _Layout 中调用此子操作:
<footer>
@Html.Action("Copyright", "Index")
</footer>
关于asp.net-mvc-4 - 如何将 IClock 注入(inject) MVC4 中的 _Layout?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14946463/