Пример #1
0
        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
                );
        }
Пример #2
0
        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));
        }
Пример #3
0
        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;
        }
Пример #4
0
        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;
        }
Пример #5
0
        /// <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));
        }