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]); }
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]); }
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)); }); }
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)); }
private void RegisterRoutes(DotvvmRouteTable routeTable) { routeTable.Add("DefaultRoute", "", "Views/default.dothtml"); }
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); }