Exemple #1
0
        public static void AddWithAmp(this DotvvmRouteTable routeTable, string routeName, string url, Type dotvvmPagePresenterType, Type ampPagePresenterType, DotvvmConfiguration dotvvmConfiguration, object dotvvmPageDefaultValues = null, object ampPageDefaultValues = null)
        {
            if (!typeof(IAmpPresenter).IsAssignableFrom(ampPagePresenterType))
            {
                throw new ArgumentException($"ampPagePresenterType has to inherit from {nameof(IAmpPresenter)}.", nameof(ampPagePresenterType));
            }

            var ampRouteManager = GetAmpConfiguration(dotvvmConfiguration).RouteManager;

            var ampPageRoute = ampRouteManager.BuildAmpRouteName(routeName);

            if (ampPageDefaultValues == null)
            {
                ampPageDefaultValues = dotvvmPageDefaultValues;
            }

            Func <IServiceProvider, IDotvvmPresenter> presenterFactory = provider =>
            {
                if (!typeof(IDotvvmPresenter).IsAssignableFrom(dotvvmPagePresenterType))
                {
                    throw new ArgumentException("presenterType has to inherit from DotVVM.Framework.Hosting.IDotvvmPresenter.", nameof(dotvvmPagePresenterType));
                }

                var dotvvmPresenter = (IDotvvmPresenter)provider.GetService(dotvvmPagePresenterType);
                return(new DotvvmAmpLinkPresenter(dotvvmPresenter, ampRouteManager));
            };

            routeTable.Add(routeName, url, presenterFactory, dotvvmPageDefaultValues);

            routeTable.Add(ampPageRoute, ampRouteManager.BuildAmpUrl(url), ampPagePresenterType, ampPageDefaultValues);

            ampRouteManager.RegisterRoute(routeTable[ampPageRoute], routeTable[routeName]);
        }
Exemple #2
0
        public static void AddWithAmp(this DotvvmRouteTable routeTable, string routeName, string url, DotvvmConfiguration dotvvmConfiguration, Func <IServiceProvider, IDotvvmPresenter> dotvvmPagePresenterFactory = null, Func <IServiceProvider, IAmpPresenter> ampPagePresenterFactory = null, object dotvvmPageDefaultValues = null, object ampPageDefaultValues = null)
        {
            var ampRouteManager = GetAmpConfiguration(dotvvmConfiguration).RouteManager;

            var ampPageRoute = ampRouteManager.BuildAmpRouteName(routeName);

            if (ampPageDefaultValues == null)
            {
                ampPageDefaultValues = dotvvmPageDefaultValues;
            }

            Func <IServiceProvider, IDotvvmPresenter> defaultPresenterFactory;

            if (dotvvmPagePresenterFactory == null)
            {
                defaultPresenterFactory = provider =>
                {
                    var dotvvmPresenter = routeTable.GetDefaultPresenter(provider);
                    return(new DotvvmAmpLinkPresenter(dotvvmPresenter, ampRouteManager));
                };
            }
            else
            {
                defaultPresenterFactory = provider =>
                {
                    var dotvvmPresenter = dotvvmPagePresenterFactory(provider);
                    return(new DotvvmAmpLinkPresenter(dotvvmPresenter, ampRouteManager));
                };
            }

            routeTable.Add(routeName, url, defaultPresenterFactory, dotvvmPageDefaultValues);
            routeTable.Add(ampPageRoute, ampRouteManager.BuildAmpUrl(url), ampPagePresenterFactory ?? new Func <IServiceProvider, IDotvvmPresenter>(GetDefaultAmpPresenter), ampPageDefaultValues);

            ampRouteManager.RegisterRoute(routeTable[ampPageRoute], routeTable[routeName]);
        }
Exemple #3
0
        public void DotvvmRoute_PresenterFactoryMethod()
        {
            var configuration = DotvvmConfiguration.CreateDefault(services => {
                services.TryAddScoped <TestPresenter>();
            });

            var table = new DotvvmRouteTable(configuration);

            table.Add("Article", "", typeof(TestPresenter), null);
            Assert.IsInstanceOfType(table.First().GetPresenter(configuration.ServiceProvider), typeof(TestPresenter));

            Assert.ThrowsException <ArgumentException>(() => {
                table.Add("Blog", "", typeof(TestPresenterWithoutInterface));
            });
        }
Exemple #4
0
        public void DotvvmRoute_PresenterType()
        {
            var configuration = DotvvmConfiguration.CreateDefault(services => {
                services.TryAddScoped <TestPresenter>();
            });

            var table = new DotvvmRouteTable(configuration);

            table.Add("Article", "", provider => provider.GetService <TestPresenter>(), null);
            Assert.IsInstanceOfType(table.First().GetPresenter(configuration.ServiceProvider), typeof(TestPresenter));
        }
Exemple #5
0
 private void RegisterRoutes(DotvvmRouteTable routeTable)
 {
     routeTable.Add("DefaultRoute", "", "Views/default.dothtml");
 }
Exemple #6
0
        public static void AddLocalizedRoute(this DotvvmRouteTable routeTable, string routeName, string url, string virtualPath, object defaultValues = null, Func <IDotvvmPresenter> presenterFactory = null)
        {
            var localizedUrl = $"{{{Constants.CultureRouteParameterName}:{Constants.CultureRouteParameterName}}}{(string.IsNullOrWhiteSpace(url) ? "" : "/")}{url}";

            routeTable.Add(routeName, localizedUrl, virtualPath, defaultValues, presenterFactory);
        }