无法使RazorEngine与ASP核心DI容器一起使用

时间:2019-07-23 19:09:08

标签: c# asp.net-core razorengine

我希望可以使用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

有什么想法吗?

0 个答案:

没有答案