gpt4 book ai didi

asp.net-mvc-4 - 如何将 IClock 注入(inject) MVC4 中的_Layout?

转载 作者:行者123 更新时间:2023-12-01 11:46:18 28 4
gpt4 key购买 nike

默认的 MVC 模板使用“@DateTime.Now.Year”来显示版权年份,但我更愿意在任何地方都使用 NodaTime。

我目前正在使用 Ninject 将一个 IClock 实例注入(inject)到执行特定时间或日期操作的 Controller 中。是否有推荐的方法来访问类似于“DateTime.Now”的 MVC 中的“全局 IClock”?我想我可以将 IClock 注入(inject)每个 Controller ,然后将它传递给每个 View ,但有时访问全局的东西会很好。

我知道我可以在布局模板中使用 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com