protected virtual void OnInitialization()
        {
            applicationDescription      = CreateApplicationDescription();
            LogManager.Configuration    = CreateLoggingConfigurationBuilder().CreateConfiguration(applicationDescription);
            environmentProvider         = CreateEnvironmentProvider();
            configurationDataProvider   = CreateConfigurationProvider(applicationDescription);

            log.Info("Starting cli application: {0}",applicationDescription.Name);

            var assemblies = FilterAssemblies(applicationDescription.Assemblies);

            log.Info("Building application container");

            var containerBuilder = new ContainerBuilder();

            containerBuilder.RegisterInstance(environmentProvider).As<IEnvironmentProvider>();
            containerBuilder.RegisterInstance(configurationDataProvider).As<IConfigurationDataProvider>();
            containerBuilder.RegisterInstance(applicationDescription).As<IApplicationDescription>();
            containerBuilder.RegisterSource(new ConfigurationRegistrationSource(configurationDataProvider,environmentProvider.GetEnvironmentSequence()));

            containerBuilder.RegisterAutofacModules(assemblies);
            containerBuilder.RegisterDependencyModules(assemblies);

            applicationLifetimeScope = containerBuilder.Build();

            log.Info("Application container built successfully");

            // Execute boottasks
            foreach( var bootTask in applicationLifetimeScope.Resolve<IEnumerable<IBootTask>>().OrderByDependencies())
            {
                log.Info("Executing boottask: {0}",bootTask.GetType().Name.Replace("Boot",string.Empty).Replace("Task",string.Empty));
                bootTask.Boot();
            }

            log.Info("Cli application initialization complete");
        }
Example #2
0
        private void OneTimeInitialization()
        {
            applicationDescription      = CreateApplicationDescription();
            LogManager.Configuration    = CreateLoggingConfigurationBuilder().CreateConfiguration(applicationDescription);
            environmentProvider         = CreateEnvironmentProvider();
            configurationDataProvider   = CreateConfigurationProvider(applicationDescription);

            log.Info("Starting web application: {0}",applicationDescription.Name);

            var assemblies = FilterAssemblies(applicationDescription.Assemblies);

            log.Info("Building application container");

            var containerBuilder = new ContainerBuilder();

            containerBuilder.RegisterInstance(environmentProvider).As<IEnvironmentProvider>();
            containerBuilder.RegisterInstance(configurationDataProvider).As<IConfigurationDataProvider>();
            containerBuilder.RegisterInstance(applicationDescription).As<IApplicationDescription>();
            containerBuilder.RegisterInstance(GlobalConfiguration.Configuration).As<HttpConfiguration>();
            containerBuilder.RegisterSource(new ConfigurationRegistrationSource(configurationDataProvider,environmentProvider.GetEnvironmentSequence()));

            containerBuilder.RegisterAutofacModules(assemblies);
            containerBuilder.RegisterDependencyModules(assemblies);

            applicationLifetimeScope = containerBuilder.Build();

            log.Info("Application container built successfully");

            DependencyResolver.SetResolver(new AutofacDependencyResolver(applicationLifetimeScope));
            GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(applicationLifetimeScope);

            // Documentation provider:
            var documentationFilename = Server.MapPath("~/bin/" + GetType().BaseType.Assembly.GetName().Name + ".xml");
            if (File.Exists(documentationFilename))
            {
                GlobalConfiguration.Configuration.SetDocumentationProvider(
                    new XmlDocumentationProvider(documentationFilename));
            }
            else
            {
                log.Warn("Could not find documentation file: {0}",documentationFilename);
            }

            // Register areas
            foreach( var areaRegistration in applicationLifetimeScope.Resolve<IEnumerable<AreaRegistration>>().OrderByDependencies())
            {
                log.Info("Registering area: {0}",areaRegistration.AreaName);

                var areaRegistrationContext = new AreaRegistrationContext(areaRegistration.AreaName, RouteTable.Routes);
                areaRegistration.RegisterArea(areaRegistrationContext);
            }

            // Register routes
            foreach (var routeModule in applicationLifetimeScope.Resolve<IEnumerable<IRouteRegistrar>>().OrderByDependencies())
            {
                log.Info("Registering routes from registrar: {0}", routeModule.GetType().Name.Replace("Route", string.Empty).Replace("Registrar", string.Empty));
                routeModule.RegisterRoutes(RouteTable.Routes);
            }

            // Execute boottasks
            foreach( var bootTask in applicationLifetimeScope.Resolve<IEnumerable<IBootTask>>().OrderByDependencies())
            {
                log.Info("Executing boottask: {0}",bootTask.GetType().Name.Replace("Boot",string.Empty).Replace("Task",string.Empty));
                bootTask.Boot();
            }

            log.Info("Web application initialization complete");
        }