public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); LocalizationWebConfig.RegisterRoutes(routes); routes.MapRoute( "Default", // Route name "{language}", // URL with parameters new { language = "en-US", controller = "Friends", action = "Index", id = UrlParameter.Optional } // Parameter defaults ); }
public override void Boot(RouteCollection routes) { base.Boot(routes); //we requrie that a custom GlobalFilter is added so see if it is there: if (!GlobalFilters.Filters.ContainsFilter <ProxyableResultAttribute>()) { GlobalFilters.Filters.Add(new ProxyableResultAttribute()); } routes.RegisterArea(_installRegistration); //register all component areas foreach (var c in _componentAreas) { routes.RegisterArea(c); } //IMPORTANT: We need to register the Rebel area after the components because routes overlap. // For example, a surface controller might have a url of: // /Rebel/MyPackage/Surface/MySurface // and because the default action is 'Index' its not required to be there, however this same route // matches the default Rebel back office route of Rebel/{controller}/{action}/{id} // so we want to make sure that the plugin routes are matched first routes.RegisterArea(_areaRegistration); //ensure that the IAttributeTypeRegistry is set AttributeTypeRegistry.SetCurrent(_attributeTypeRegistry); //register validation extensions DataAnnotationsModelValidatorProviderExtensions.RegisterValidationExtensions(); LocalizationWebConfig.RegisterRoutes(routes, _settings.RebelPaths.LocalizationPath); //If this is outside of an ASP.Net application (i.e. Unit test) and RegisterVirtualPathProvider is called then an exception is thrown. if (HostingEnvironment.IsHosted) { HostingEnvironment.RegisterVirtualPathProvider(new EmbeddedViewVirtualPathProvider()); HostingEnvironment.RegisterVirtualPathProvider(new CodeDelegateVirtualPathProvider()); } //register custom validation adapters DataAnnotationsModelValidatorProvider.RegisterAdapterFactory( typeof(HiveIdRequiredAttribute), (metadata, controllerContext, attribute) => new RequiredHiveIdAttributeAdapter(metadata, controllerContext, (HiveIdRequiredAttribute)attribute)); }
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); //Setup default manager LocalizationWebConfig.SetupDefaultManager(typeof(MvcApplication).Assembly); //Setup localizing binding stuff LocalizationWebConfig.SetupMvcDefaults(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); // Store this because we need it for the demo DefaultLanguageResolver = ((DefaultTextManager)LocalizationConfig.TextManager).CurrentLanguage; }
public static void Setup() { var manager = LocalizationWebConfig.SetupDefaultManager <LocalizationBootstrapper>(); manager.PrepareTextSources(manager.GetNamespace <DefaultTextManager>()); manager.MissingTextHandler = (ns, key, lang) => "(" + key + ")"; /*//Get texts defined in this project. They will override those from assemblies * var xml = new XmlTextSource * { * Document = XDocument.Load(HostingEnvironment.MapPath("~/LocalizationEntries.xml")) * }; * * manager.Texts.Sources.Add(new PrioritizedTextSource(xml, 2)); */ _currentManager = manager; }
/// <summary>Builds the dependency demands required by this implementation. </summary> /// <param name="builder">The <see cref="IContainerBuilder"/> .</param> /// <param name="builderContext"></param> public void Build(IContainerBuilder builder, IBuilderContext builderContext) { //raise the building event OnContainerBuilding(new ContainerBuilderEventArgs(builder)); //register all of the abstract web types builder.AddDependencyDemandBuilder(new WebTypesDemandBuilder(_httpApp)); var typeFinder = new TypeFinder(); builder.ForInstanceOfType(typeFinder) .ScopedAs.Singleton(); //register the rebel settings builder.ForFactory(x => RebelSettings.GetSettings()) .KnownAsSelf() .ScopedAs.Singleton(); //only have one instance ever //register our MVC types builder.AddDependencyDemandBuilder(new MvcTypesDemandBuilder(typeFinder)); // Register the IRoutableRequestContext builder.For <HttpRequestScopedCache>().KnownAs <AbstractScopedCache>().ScopedAs.Singleton(); builder.For <HttpRuntimeApplicationCache>().KnownAs <AbstractApplicationCache>().ScopedAs.Singleton(); builder.For <HttpRequestScopedFinalizer>().KnownAs <AbstractFinalizer>().ScopedAs.Singleton(); //builder.For<DefaultFrameworkContext>().KnownAs<IFrameworkContext>().ScopedAs.Singleton(); builder.For <RebelApplicationContext>().KnownAs <IRebelApplicationContext>().ScopedAs.Singleton(); builder.For <RoutableRequestContext>().KnownAs <IRoutableRequestContext>().ScopedAs.HttpRequest(); builder.For <DefaultBackOfficeRequestContext>().KnownAs <IBackOfficeRequestContext>().ScopedAs.HttpRequest(); // TODO: Ensure this isn't created manually anywhere but tests, only via a factory: builder.ForType<IRebelRenderModel, RebelRenderContext>().Register().ScopedPerHttpRequest(); builder.For <DefaultRenderModelFactory>().KnownAs <IRenderModelFactory>(). ScopedAs.Singleton(); // Register Hive provider //builder.AddDependencyDemandBuilder(new HiveDemandBuilder()); builder.AddDependencyDemandBuilder(new Hive.DemandBuilders.HiveDemandBuilder()); // Register Persistence provider loader //builder.AddDependencyDemandBuilder(new Framework.Persistence.DependencyManagement.DemandBuilders.LoadFromPersistenceConfig()); builder.AddDependencyDemandBuilder(new Hive.DemandBuilders.LoadFromPersistenceConfig()); // Register Cms bootstrapper // TODO: Split RebelContainerBuilder between Cms and Frontend variants / needs builder.For <CmsBootstrapper>().KnownAsSelf(); // Register Frontend bootstrapper builder.ForFactory( x => new RenderBootstrapper( x.Resolve <IRebelApplicationContext>(), x.Resolve <IRouteHandler>(RenderRouteHandler.SingletonServiceName), x.Resolve <IRenderModelFactory>()) ) .KnownAsSelf(); //register all component areas, loop through all found package folders //TODO: All other places querying for packages use the NuGet IO FileManager stuff, not the standard .Net IO classes var pluginFolder = new DirectoryInfo(_httpApp.Server.MapPath(_settings.PluginConfig.PluginsPath)); foreach (var package in pluginFolder.GetDirectories(PluginManager.PackagesFolderName) .SelectMany(x => x.GetDirectories() .Where(PluginManager.IsPackagePluginFolder))) { //register an area for this package builder.For <PackageAreaRegistration>() .KnownAsSelf() .WithNamedParam("packageFolder", package); } //register the RoutingEngine builder .For <DefaultRoutingEngine>() .KnownAs <IRoutingEngine>() .ScopedAs.HttpRequest(); //register the package context builder .ForFactory(x => new DefaultPackageContext(x.Resolve <RebelSettings>(), HostingEnvironment.MapPath)) //.For<DefaultPackageContext>() .KnownAs <IPackageContext>() .ScopedAs.Singleton(); //register the PropertyEditorFactory builder.For <PropertyEditorFactory>() .KnownAs <IPropertyEditorFactory>() .ScopedAs.Singleton(); //register the ParameterEditorFactory builder.For <ParameterEditorFactory>() .KnownAs <IParameterEditorFactory>() .ScopedAs.Singleton(); //register the SecurityService builder.ForFactory( x => new SecurityService( x.Resolve <IMembershipService <User> >(), x.Resolve <IMembershipService <Member> >(), x.Resolve <IPermissionsService>(), x.Resolve <IPublicAccessService>())) .KnownAs <ISecurityService>(); //register the MembershipService builder.ForFactory( x => { var frameworkContext = x.Resolve <IFrameworkContext>(); var hiveManager = x.Resolve <IHiveManager>(); MembershipProvider membershipProvider = Membership.Providers["UsersMembershipProvider"]; return(new MembershipService <User, UserProfile>( frameworkContext, hiveManager, "security://user-profiles", "security://user-groups", FixedHiveIds.UserProfileVirtualRoot, membershipProvider, _settings.MembershipProviders)); }) .KnownAs <IMembershipService <User> >() .ScopedAs.Singleton(); builder.ForFactory( x => new MembershipService <Member, MemberProfile>( x.Resolve <IFrameworkContext>(), x.Resolve <IHiveManager>(), "security://member-profiles", "security://member-groups", FixedHiveIds.MemberProfileVirtualRoot, Membership.Providers["MembersMembershipProvider"], _settings.MembershipProviders) ) .KnownAs <IMembershipService <Member> >() .ScopedAs.Singleton(); builder.ForFactory( x => new PermissionsService( x.Resolve <IHiveManager>(), x.Resolve <IEnumerable <Lazy <Permission, PermissionMetadata> > >(), x.Resolve <IMembershipService <User> >())) .KnownAs <IPermissionsService>() .ScopedAs.Singleton(); builder.ForFactory( x => new PublicAccessService( x.Resolve <IHiveManager>(), x.Resolve <IMembershipService <Member> >(), x.Resolve <IFrameworkContext>())) .KnownAs <IPublicAccessService>() .ScopedAs.Singleton(); //register the CmsAttributeTypeRegistry builder.For <CmsAttributeTypeRegistry>() .KnownAs <IAttributeTypeRegistry>() .ScopedAs.Singleton(); //component registration _componentRegistrar.RegisterTasks(builder, typeFinder); _componentRegistrar.RegisterTreeControllers(builder, typeFinder); _componentRegistrar.RegisterPropertyEditors(builder, typeFinder); _componentRegistrar.RegisterParameterEditors(builder, typeFinder); _componentRegistrar.RegisterEditorControllers(builder, typeFinder); _componentRegistrar.RegisterMenuItems(builder, typeFinder); _componentRegistrar.RegisterSurfaceControllers(builder, typeFinder); _componentRegistrar.RegisterDashboardFilters(builder, typeFinder); _componentRegistrar.RegisterDashboardMatchRules(builder, typeFinder); _componentRegistrar.RegisterPermissions(builder, typeFinder); _componentRegistrar.RegisterMacroEngines(builder, typeFinder); //register the registrations builder.For <ComponentRegistrations>().KnownAsSelf(); //register task manager builder.For <ApplicationTaskManager>().KnownAsSelf().ScopedAs.Singleton(); //register our model mappings and resolvers builder.AddDependencyDemandBuilder(new ModelMappingsDemandBuilder()); //TODO: More stuff should happen with the TextManager here (e.g. db access and whatnot) //The user may later override settings, most importantly the LocalizationConfig.CurrentTextManager delegate to implement different environments //The text manager is assumed to be set up by the framework var textManager = LocalizationConfig.TextManager; LocalizationWebConfig.ApplyDefaults <TWebApp>(textManager, overridesPath: "~/App_Data/Rebel/LocalizationEntries.xml"); LocalizationWebConfig.SetupMvcDefaults(setupMetadata: false); //The name of the assembly that contains common texts textManager.FallbackNamespaces.Add("Rebel.Cms.Web"); OnContainerBuildingComplete(new ContainerBuilderEventArgs(builder)); }