/// <summary> /// Gets the <see cref="Scope"/> that is currently in scope or <b>null</b> when no /// <see cref="Scope"/> is currently in scope. /// </summary> /// <example> /// The following example registers a <b>ServiceImpl</b> type as transient (a new instance will be /// returned every time) and registers an initializer for that type that will register that instance /// for disposal in the <see cref="Scope"/> in which context it is created: /// <code lang="cs"><![CDATA[ /// container.Register<IService, ServiceImpl>(); /// container.RegisterInitializer<ServiceImpl>(instance => /// { /// container.GetCurrentLifetimeScope().RegisterForDisposal(instance); /// }); /// ]]></code> /// </example> /// <param name="container">The container.</param> /// <returns>A new <see cref="Scope"/> instance.</returns> /// <exception cref="ArgumentNullException"> /// Thrown when the <paramref name="container"/> is a null reference.</exception> public static Scope GetCurrentLifetimeScope(this Container container) { Requires.IsNotNull(container, "container"); return(container.GetLifetimeScopeManager().CurrentScope); }
/// <summary> /// Begins a new lifetime scope for the given <paramref name="container"/> on the current thread. /// Services, registered with /// <see cref="RegisterLifetimeScope{TService, TImplementation}(Container)">RegisterLifetimeScope</see> or /// using the <see cref="LifetimeScopeLifestyle"/> and are requested within the same thread as where the /// lifetime scope is created, are cached during the lifetime of that scope. /// The scope should be disposed explicitly when the scope ends. /// </summary> /// <param name="container">The container.</param> /// <returns>A new <see cref="Scope"/> instance.</returns> /// <exception cref="ArgumentNullException"> /// Thrown when the <paramref name="container"/> is a null reference.</exception> /// <exception cref="InvalidOperationException">Thrown when <see cref="EnableLifetimeScoping"/> has /// not been called previously.</exception> /// <example> /// <code lang="cs"><![CDATA[ /// using (container.BeginLifetimeScope()) /// { /// var handler container.GetInstance(rootType) as IRequestHandler; /// /// handler.Handle(request); /// } /// ]]></code> /// </example> public static Scope BeginLifetimeScope(this Container container) { Requires.IsNotNull(container, "container"); return(container.GetLifetimeScopeManager().BeginLifetimeScope()); }