示例#1
0
        /// <summary>
        /// Creates a <see cref="Lifestyle"/> that supports sharing an instance within a Web Api request, or if no Web Api request
        /// is in scope, creates a transient instance.
        /// </summary>
        /// <param name="container"></param>
        /// <returns></returns>
        public static Lifestyle PerWebApiRequestOrTransientLifestyle(this Container container)
        {
            Contract.Requires <ArgumentNullException>(container != null);

            var webApiRequestLifestyle = new WebApiRequestLifestyle(true);
            var hybridLifestyle        = Lifestyle.CreateHybrid(() => webApiRequestLifestyle.GetCurrentScope(container) == null, Lifestyle.Transient, webApiRequestLifestyle);

            return(hybridLifestyle);
        }
示例#2
0
        /// <summary>
        /// Registers application-level IoC settings.
        /// </summary>
        /// <param name="container"></param>
        public void RegisterServices(Container container)
        {
            // Support sharing the DbContext amongst objects participating in a single request;
            // but if there is no request, just make it transient.
            var webApiRequestLifestyle = new WebApiRequestLifestyle(true);
            var hybridLifestyle        = Lifestyle.CreateHybrid(() => webApiRequestLifestyle.GetCurrentScope(container) == null, Lifestyle.Transient, webApiRequestLifestyle);

            container.Register <TodoListContext>(hybridLifestyle);
            container.RegisterLazy <TodoListContext>();

            // Required: Register global datamodel metadata (IContainerMetadata and IContainerMetadata<DbContext>)
            var mmRegistration = Lifestyle.Singleton.CreateRegistration <DbContextMetadata <TodoListContext> >(container);

            container.AddRegistration(typeof(IContainerMetadata), mmRegistration);
            container.AddRegistration(typeof(IContainerMetadata <TodoListContext>), mmRegistration);

            // Query validation settings could be specified here
            container.RegisterSingle(new ODataValidationSettings()
            {
                MaxExpansionDepth = 5,
                MaxTop            = 200
            });
        }