コード例 #1
0
ファイル: ViewFactory.cs プロジェクト: vdandrade/Plato
        public async Task <IHtmlContent> InvokeAsync(ViewDisplayContext displayContext)
        {
            // Contextualize view invoker
            _viewInvoker.Contextualize(displayContext);

            // Apply view & model alterations
            if (displayContext.ViewAdaptorResults != null)
            {
                foreach (var viewAdapterResult in displayContext.ViewAdaptorResults)
                {
                    var updatedView = displayContext.ViewDescriptor.View;

                    // Apply view alterations
                    var viewAlterations = viewAdapterResult.ViewAlterations;
                    if (viewAlterations.Count > 0)
                    {
                        foreach (var alteration in viewAlterations)
                        {
                            updatedView.ViewName = alteration;
                        }
                    }

                    // Apply model alterations
                    var modelAlterations = viewAdapterResult.ModelAlterations;
                    if (modelAlterations.Count > 0)
                    {
                        foreach (var alteration in modelAlterations)
                        {
                            updatedView.Model = alteration(updatedView.Model);
                        }
                    }

                    displayContext.ViewDescriptor.View = updatedView;
                }
            }

            // Invoke generic view
            var htmlContent = await _viewInvoker.InvokeAsync(displayContext.ViewDescriptor.View);

            // Apply adapter output alterations
            if (displayContext.ViewAdaptorResults != null)
            {
                foreach (var viewAdapterResult in displayContext.ViewAdaptorResults)
                {
                    var alterations = viewAdapterResult.OutputAlterations;
                    if (alterations.Count > 0)
                    {
                        foreach (var alteration in alterations)
                        {
                            htmlContent = alteration(htmlContent);
                        }
                    }
                }
            }

            return(htmlContent);
        }
コード例 #2
0
        // Implementation

        public void Contextualize(ViewDisplayContext context)
        {
            ViewContext = context.ViewContext;
        }