/// <summary>
        /// Initialize can configure main container types.
        /// </summary>
        private void ConfigureContainerAndRegisterTypes(WebUIConfigs uiConfigs, IAppBuilder appBuilder, Container container, IEnumerable <Assembly> assemblies)
        {
            container.Options.DefaultLifestyle          = new WebRequestLifestyle();
            container.Options.DefaultScopedLifestyle    = new WebRequestLifestyle();
            container.Options.PropertySelectionBehavior = new ImportPropertySelectionBehavior();

            // Register all web platform commont types
            DependencyInjectionInitializer.RegisterWebPlatformCommonTypes(uiConfigs, appBuilder, container, assemblies);

            // Register all optimization bundles
            container.RegisterCollection <Bundle>(assemblies);

            // MVC IFilterProvider attributes
            container.RegisterMvcIntegratedFilterProvider();

            // MVC controllers
            container.RegisterMvcControllers();

            // OAuth user sign in manager
            container.Register <DotUserSignInManager>();

            // IAuthenticationManager
            container.Register(() =>
            {
                // If testing (container.Verify()) or no context available, return a dummy instance
                if (AdvancedExtensions.IsVerifying(container) || HttpContext.Current == null)
                {
                    return(new OwinContext().Authentication);
                }

                // Otherwise return current authentication manager instance
                return(HttpContext.Current.GetOwinContext().Authentication);
            });

            // IWebContext
            container.Register <IWebContext>(() =>
            {
                // If testing (container.Verify()) or no context available, return a dummy instance
                if (AdvancedExtensions.IsVerifying(container) || HttpContext.Current == null)
                {
                    return(new WebUIContext());
                }

                // Otherwise return current user web context.
                return(new WebUIContext(new CorePrincipal(HttpContext.Current.User)));
            });
        }
Example #2
0
        private static async Task <Container> GetContainerAsync()
        {
            if (_container != null)
            {
                return(_container);
            }
            using (await AsyncLock.LockAsync())
            {
                var container = DependencyInjectionInitializer.Initialize();

                var startupTasks = container.GetAllInstances <IRunAtStartup>();
                foreach (var task in startupTasks)
                {
                    await task.RunAsync();
                }

                _container = container;
            }

            return(_container);
        }