首页 > 解决方案 > 如何在类中使用接口声明?

问题描述

我的 C# 项目中有以下接口,它应该返回一个 html 页面以从模型中作为模板电子邮件发送:

namespace Project.Templates
{
    public interface IRazorViewToStringRenderer
    {
        Task<string> RenderViewToStringAsync<TModel>(string viewName, TModel model);
    }
    public class RazorViewToStringRenderer : IRazorViewToStringRenderer
    {
        private readonly IRazorViewEngine _viewEngine;
        private readonly ITempDataProvider _tempDataProvider;
        private readonly IServiceProvider _serviceProvider;

        public RazorViewToStringRenderer(
          IRazorViewEngine viewEngine,
          ITempDataProvider tempDataProvider,
          IServiceProvider serviceProvider)
        {
            _viewEngine = viewEngine;
            _tempDataProvider = tempDataProvider;
            _serviceProvider = serviceProvider;
        }

        public async Task<string> RenderViewToStringAsync<TModel>(string viewName, TModel model)
        {
            var actionContext = GetActionContext();
            var view = FindView(actionContext, viewName);

            using (var output = new StringWriter())
            {
                var viewContext = new ViewContext(
                  actionContext,
                  view,
                  new ViewDataDictionary<TModel>(new EmptyModelMetadataProvider(), new ModelStateDictionary())
                  {
                      Model = model
                  },
                  new TempDataDictionary(actionContext.HttpContext, _tempDataProvider),
                  output,
                  new HtmlHelperOptions());

                await view.RenderAsync(viewContext);

                return output.ToString();
            }
        }
...

    }
}

我会在我的 Helper 类中使用该接口,我试图声明它并按以下方式使用,但在每种情况下 _renderer 都是空的。

private readonly IRazorViewToStringRenderer _renderer;
        
        public async Task<bool> SendRiepilogoAsync(RiepilogoTakeaway ordine)
        {
            try
            {

                ...
                var htmlBody = await _renderer.RenderViewToStringAsync("~/Views/Emails/EmailRiepilogo.cshtml", model);

                var message = new MailMessage(from, to)
                {
                    Subject = "Riepilogo ordine!",
                    Body = htmlBody
                };

...
}

我试图用它初始化接口,new但它仍然返回 null_renderer

标签: c#

解决方案


推荐阅读