/// <summary>
 /// Add Scoped
 /// </summary>
 /// <param name="bag"></param>
 /// <param name="implementationFunc"></param>
 /// <param name="implementationType"></param>
 /// <returns></returns>
 /// <exception cref="ArgumentNullException"></exception>
 public static R AddScoped(this R bag, Func <object> implementationFunc, Type implementationType)
 {
     bag.CheckNull(nameof(bag));
     implementationFunc.CheckNull(nameof(implementationFunc));
     bag.Register(DependencyProxyDescriptor.CreateForObjectDelegate(implementationFunc, implementationType, DependencyLifetimeType.Scoped));
     return(bag);
 }
 /// <summary>
 /// Try add Singleton
 /// </summary>
 /// <param name="bag"></param>
 /// <param name="implementationFunc"></param>
 /// <param name="implementationType"></param>
 /// <exception cref="ArgumentNullException"></exception>
 public static void TryAddSingleton(this R bag, Func <object> implementationFunc, Type implementationType)
 {
     bag.CheckNull(nameof(bag));
     implementationFunc.CheckNull(nameof(implementationFunc));
     bag.TryRegister(DependencyProxyDescriptor.CreateForObjectDelegate(implementationFunc, implementationType, DependencyLifetimeType.Singleton));
 }