namespace PasteApeart.Handler.lazy
{
/// <summary>
///
/// </summary>
public interface ILazyServiceProvider
{
/// <summary>
///
/// </summary>
/// <param name="serviceType"></param>
/// <returns></returns>
object GetRequiredService(Type serviceType);
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
T GetRequiredService<T>() where T : class;
/// <summary>
///
/// </summary>
/// <param name="serviceType"></param>
/// <returns></returns>
object GetService(Type serviceType);
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
T GetService<T>() where T : class;
/// <summary>
///
/// </summary>
/// <param name="serviceType"></param>
/// <returns></returns>
object LazyGetRequiredService(Type serviceType);
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
T LazyGetRequiredService<T>() where T : class;
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="factory"></param>
/// <returns></returns>
T LazyGetRequiredService<T>(Func<IServiceProvider, object> factory) where T : class;
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
T LazyGetService<T>() where T : class;
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="factory"></param>
/// <returns></returns>
T LazyGetService<T>(Func<IServiceProvider, object> factory) where T : class;
}
}