/// <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); }
/// <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 }); }