c# - 如何在类中使用接口声明?
问题描述
我的 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