namespace SteroidsDI.Core;

/// <summary>
/// Provider of scoped <see cref="IServiceProvider" />. The mission of this interface is
/// not to CREATE something, but to provide the required object, which was created one way
/// or another before that. That is, it is an interface for STORAGE of objects. This is its
/// difference from <see cref = "IScopeFactory" />.
/// </summary>
public interface IScopeProvider
{
    /// <summary>
    /// Gets scoped <see cref="IServiceProvider" />, that is,
    /// one in which scoped dependencies can be resolved.
    /// </summary>
    /// <param name="rootProvider">
    /// The root <see cref="IServiceProvider" /> object, which the
    /// provider may need in order to calculate the current scope.
    /// </param>
    /// <returns>
    /// The scoped <see cref="IServiceProvider" /> object or <c>null</c>
    /// if the provider does not have the current scope.
    /// </returns>
    IServiceProvider? GetScopedServiceProvider(IServiceProvider rootProvider);
}