protected virtual EmailTemplateDefinition FindTemplateDefinition(EmailTemplateProviderContributorContext contributorContext)
 {
     return(contributorContext
            .ServiceProvider
            .GetRequiredService <IOptions <EmailTemplateOptions> >()
            .Value
            .Templates
            .GetOrDefault(contributorContext.Name));
 }
        public Task ProvideAsync(EmailTemplateProviderContributorContext contributorContext)
        {
            var templateDefinition = FindTemplateDefinition(contributorContext);

            if (templateDefinition == null)
            {
                return(Task.CompletedTask);
            }

            var fileInfo = FindVirtualFileInfo(contributorContext, templateDefinition);

            if (fileInfo == null)
            {
                return(Task.CompletedTask);
            }

            contributorContext.Template = new EmailTemplate(fileInfo.ReadAsString(), templateDefinition);
            return(Task.CompletedTask);
        }
        protected virtual IFileInfo FindVirtualFileInfo(EmailTemplateProviderContributorContext contributorContext, EmailTemplateDefinition templateDefinition)
        {
            var virtualFilePath = templateDefinition?.GetVirtualFilePathOrNull();

            if (virtualFilePath == null)
            {
                return(null);
            }

            var virtualFileProvider = contributorContext.ServiceProvider.GetRequiredService <IVirtualFileProvider>();

            var fileInfo = virtualFileProvider.GetFileInfo(virtualFilePath);

            if (fileInfo?.Exists != true)
            {
                return(null);
            }

            return(fileInfo);
        }