场合
我们正在从头开始重建Web应用程序(winforms)。当新应用程序发布时,旧应用程序将继续运行。这意味着新应用程序需要与旧数据库通信,我无法在那里进行任何更改。新应用程序将使用 .NET Core 2.0 MVC 构建。
旧应用程序使用基于language-id和translation-id的自定义翻译数据库表。非常直截了当。
问题
旧应用程序一遍又一遍地为每个翻译进行数据库调用。因为新应用程序需要重用此表,所以我宁愿拥有更智能的系统。由于翻译量很大,我不想在每个页面请求中获取所有数据。我也不想为每个翻译进行数据库调用。
观
我的想法是创建一个自定义的HtmlHelper(或依赖注入的转换实例,但在这种情况下可能更难),只需要翻译ID。帮助程序将从cookie中获取语言。这样,我们可以在视图中使用以下代码:
@ Html.Translate(1337)
我想要实现的是,使用第一个Translate-call扫描RazorView以进行所有Translate-calls(带有参数)。这样,我可以使用Dependency Injected Scoped实例来保存所有翻译。这意味着我只需要为每个请求的视图进行一次数据库调用。
实际问题
这听起来是个好主意,这会是可行的吗?我搜索了MVC源代码,但无法找到实现此类目的的方法。 IHtmlHelper中的RazorView实例似乎没有IHtmlHelper列表或其他内容......