/// <summary> /// Creates a new instance of <see cref="InstanceUsage{TInstance}"/>. /// </summary> /// <param name="pool">The <see cref="LocklessInstancePoolForClasses{TInstance}"/>.</param> /// <param name="factory">The callback to create a new instance of <typeparamref name="TInstance"/>, if the pool currently does not have instances available.</param> /// <exception cref="ArgumentNullException">If either of <paramref name="pool"/> or <paramref name="factory"/> is <c>null</c>.</exception> /// <exception cref="ArgumentException">If <paramref name="factory"/> is used and it returns <c>null</c>.</exception> public InstanceUsage( LocklessInstancePoolForClasses <TInstance> pool, Func <TInstance> factory ) { this._pool = ArgumentValidator.ValidateNotNull(nameof(pool), pool); this.Instance = (pool.TakeInstance() ?? ArgumentValidator.ValidateNotNull(nameof(factory), factory)()) ?? throw new ArgumentException("instance"); }
/// <summary> /// Creates a new instance of <see cref="InstancePoolForContextlessCreation{TInstance}"/>. /// </summary> /// <param name="pool">The pool to wrap.</param> /// <param name="factory">The callback to use to create a new instance of type <typeparamref name="TInstance"/>.</param> /// <exception cref="ArgumentNullException">If either or <paramref name="pool"/> or <paramref name="factory"/> is <c>null</c>.</exception> public InstancePoolForContextlessCreation( LocklessInstancePoolForClasses <TInstance> pool, Func <TInstance> factory ) { this._pool = ArgumentValidator.ValidateNotNull(nameof(pool), pool); this._factory = ArgumentValidator.ValidateNotNull(nameof(factory), factory); }