Если вам нужно создать шаблон службы на основе ASP.NET Core
RazorEngine
, вы можете получить все необходимые службы через DI
:
public TemplateService(IRazorViewEngine viewEngine, IServiceProvider serviceProvider, ITempDataProvider tempDataProvider)
{
_viewEngine = viewEngine;
_serviceProvider = serviceProvider;
_tempDataProvider = tempDataProvider;
}
Зарегистрируйтесь в DI
в вашем Startup
class:
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddScoped<ITemplateService, TemplateService>();
// ...
}
И тогда вы можете получить доступ к ITemplateService
, предоставив его конструктору класса Controller
или другой службы.И используйте Views
и ViewModels
для генерации HTML
с использованием метода RenderTemplateAsync
См. Подробности реализации здесь :
public async Task<string> RenderTemplateAsync<TViewModel>(string viewFilename, TViewModel viewModel)
{
// ... see the details by the link above
}
Так что вызов в Controller
может выглядеть следующим образомthis:
var htmlContent = await _templateService.RenderTemplateAsync(
"Email/MyEmailTemplate",
new MyEmailTemplateModel
{
ToFullName = "Dmitry Pavlov",
Link = "https://stackoverflow.com/users/804385/dmitry-pavlov",
SenderName = "Software in healthcare / medical device",
CustomText = "Thanks for the tip! I have got it now. Appreciate your help!"
});
Этот текст HTML
будет отображать результат визуализации View
с моделью, связанной с Razor
заполнителями, такими как @ Model.ToFullName в этом View
.Я предполагаю, что вы будете использовать какой-то макет для представления шаблона (я бы порекомендовал встроить в него все необходимые CSS
стили - на самом деле вы можете создать специальный файл _EmailTemplateLayout
с общей разметкой HTML
и указать это как Layout
длявсе ваши шаблоны электронной почты).