我希望可以使用RazorEngine的IViewLocalizer。我试图遵循指南以及有关SO的一些问题。
到目前为止,我有:
//Razor engine config in Startup.cs
var config = new FluentTemplateServiceConfiguration(c =>
{
c.WithBaseTemplateType(typeof(MvcTemplateBase<>));
c.ActivateUsing((ctx) =>
(ITemplate)services.BuildServiceProvider().GetRequiredService(ctx.TemplateType)
);
});
var razorEngine = RazorEngineService.Create(config);
services.AddSingleton(razorEngine);
我知道我的ILocalizer已正确注册为服务,因此我可以在RazorEngine之外使用它而不会出现问题。
我的TemplateBase<T>
实现是:
public abstract class MvcTemplateBase<T> : TemplateBase<T>
{
public MvcTemplateBase(IViewLocalizer localizer)
{
Html = new HtmlHelper();
Json = new JsonHelper();
Localizer = localizer;
}
public HtmlHelper Html { get; set; }
public JsonHelper Json { get; set; }
public IViewLocalizer Localizer { get; set; }
}
不幸的是,当我尝试生成模板时:
错误:(10,19)没有给出与所需的形式参数'localizer'相对应的参数 'MvcTemplateBase.MvcTemplateBase(IViewLocalizer)'
所以看来MvcTemplateBase<T>
并没有通过DI实例化。
此外,伴随上述错误,我还得到:
- 错误:(15、18)名称“ inject”在当前上下文中不存在
- 错误:(17,18)名称'模型'在当前上下文中不存在
- 错误:(19,18)名称'section'在当前上下文中不存在
- 错误:(29,4)名称“ ViewData”在当前上下文中不存在
几乎似乎正在使用TemplateBase<T>
,它没有您期望的基本属性。 AFAIK RazorEngine应该立即支持@model
。
有什么想法吗?