I have the following Interface in my C# project, which should return a html page to send as template email from a model:
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();
}
}
...
}
}
And i would use that interface in my Helper class, i was trying to declare it and use as the following but in each case the _renderer is null..
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
};
...
}
I was trying to initialize the interface with new
but it was anyway returning null in _renderer