public virtual Func <PageContext, ViewContext, object> CreatePageFactory(CompiledPageActionDescriptor actionDescriptor)
        {
            if (!typeof(PageBase).GetTypeInfo().IsAssignableFrom(actionDescriptor.PageTypeInfo))
            {
                throw new InvalidOperationException(Resources.FormatActivatedInstance_MustBeAnInstanceOf(
                                                        _pageActivator.GetType().FullName,
                                                        typeof(PageBase).FullName));
            }

            var activatorFactory  = _pageActivator.CreateActivator(actionDescriptor);
            var modelType         = actionDescriptor.ModelTypeInfo?.AsType() ?? actionDescriptor.PageTypeInfo.AsType();
            var propertyActivator = new RazorPagePropertyActivator(
                actionDescriptor.PageTypeInfo.AsType(),
                modelType,
                _modelMetadataProvider,
                _propertyAccessors);

            return((pageContext, viewContext) =>
            {
                var page = (PageBase)activatorFactory(pageContext, viewContext);
                page.PageContext = pageContext;
                page.Path = pageContext.ActionDescriptor.RelativePath;
                page.ViewContext = viewContext;
                propertyActivator.Activate(page, viewContext);
                return page;
            });
        }