示例#1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="project"></param>
        /// <param name="key"></param>
        /// <param name="model"></param>
        /// <param name="isMainPage"></param>
        /// <returns></returns>
        public async Task <string> CompileRenderAsync(
            DynamicRazorProject project,
            string key,
            object model,
            bool isMainPage = true,
            ActionDescriptor actionDescriptor = null)
        {
            if (project == null)
            {
                throw new ArgumentNullException(nameof(project));
            }

            var templateEngine = new MvcRazorTemplateEngine(_engine, project);

            var httpContext = new CustomHttpContext(_httpContextAccessor?.HttpContext);

            httpContext.RequestServices = _serviceProvider;

            _razorEngineOptions.Value.ViewLocationFormats.Insert(0, "/{0}.cshtml");

            var projectID = project.GetHashCode().ToString();

            var viewCompilerProvider = new DynamicRazorViewCompilerProvider(
                _applicationPartManager,
                templateEngine,
                _razorViewEngineFileProviderAccessor,
                _cSharpCompiler,
                _projectCacheProvider.GetCache(projectID),
                _razorEngineOptions,
                _loggerFactory);

            var engine = new RazorViewEngine(
                new DefaultRazorPageFactoryProvider(viewCompilerProvider),
                _razorPageActivator,
                _htmlEncoder,
                _razorEngineOptions,
                project,
                _loggerFactory,
                _diagnosticSource);

            var viewResult = engine.GetView(null, ViewPath.NormalizePath(key), isMainPage);

            if (!viewResult.Success)
            {
                throw new InvalidOperationException("View Not Found");
            }

            var actionContext = new ActionContext(httpContext, new RouteData(), actionDescriptor ?? new ActionDescriptor());

            var viewContext = new ViewContext(
                actionContext,
                viewResult.View,
                new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary()),
                _tempDataDictionaryFactory.GetTempData(httpContext),
                TextWriter.Null,
                _mvcViewOptions.Value.HtmlHelperOptions);

            viewContext.ViewData.Model = model;

            var sb = new StringBuilder();

            using (var sw = new StringWriter(sb))
            {
                viewContext.Writer = sw;
                await viewContext.View.RenderAsync(viewContext);
            }

            return(sb.ToString());
        }
 /// <summary>
 ///
 /// </summary>
 /// <param name="project"></param>
 /// <param name="path"></param>
 /// <param name="rootType"></param>
 /// <param name="resourceKey"></param>
 public static void AddEmbeddedItem(this DynamicRazorProject project, string path, Type rootType, string resourceKey)
 {
     project.Add(new EmbeddedRazorProjectItem(path, rootType.Assembly, resourceKey));
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="project"></param>
 /// <param name="key"></param>
 /// <param name="filePath"></param>
 public static void AddFileItem(this DynamicRazorProject project, string key, string filePath)
 {
     project.Add(new FileSystemRazorProjectItem(key, filePath));
 }
示例#4
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="project"></param>
 /// <param name="path"></param>
 /// <param name="cshtml"></param>
 public static void AddStringItem(this DynamicRazorProject project, string path, string cshtml)
 {
     project.Add(new StringRazorProjectItem(path, cshtml));
 }