【发布时间】:2019-05-29 05:56:55
【问题描述】:
作为参考,我有一个通用的BasePageModel,它继承了PageModel。
我还有几项我会一直使用的服务:
UserManager<AppUser> userManagerIHttpContextAccessor httpContextAccessorIHostingEnvironment env
有没有办法总是注入这些,这样我就不必在每个 Razor 页面上为每个服务进行构造函数注入?
【问题讨论】:
-
您根本不需要使用上下文访问器,因为您可以从 MVC 控制器和页面模型访问
HttpContext。至于用户管理器和托管环境,不,您必须正确注入它们。但是如果你发现自己经常使用它们,你应该考虑将一些逻辑从你的页面模型中移出。如果您解释一下您实际在做什么,我们或许可以提出替代方法。 -
@poke 感谢您的快速回复!在每个剃须刀页面上,我通常需要从
HttpContext访问某些内容,并确定该页面是在开发中还是在生产中加载的。似乎总是注射它们并不是很干燥。 -
您将这些信息用于什么目的?展示替代的东西?也许您可以将该逻辑移到其他地方(例如,在标签助手中,例如已经存在的
<environment>标签助手)。通常,明确列出所有依赖项被认为是一种很好的风格,即使它感觉是多余的或样板式的。 -
“在开发/测试中,我不想在提交表单时发送结果和确认电子邮件”——然后考虑将其抽象为服务。例如,不要直接从您的页面模型发送电子邮件,而是让一些电子邮件服务负责发送邮件。然后,您可以跳过在该服务中发送邮件,或者在开发期间完全更换服务实现。所以页面模型不必承担这个责任,并且无论环境如何都保持不变。
-
通常,您将有一个用于测试的 SMTP 服务器,该服务器将被配置为捕获所有外发电子邮件并将它们转发到某个内部收件箱。这样,您可以验证您的应用程序是否正常工作(不考虑当前配置的环境),同时可以防止意外电子邮件离开您的开发阶段。
标签: razor asp.net-core razor-pages