示例#1
0
文件: Actor.cs 项目: Brandhoej/Selma
        /// <summary>
        ///     Applies a use case to the <see cref="Actor"/> through a <see cref="IUseCaseRequest{TResponse}"/>.
        ///     If the <see cref="IUseCaseRequest{TResponse}"/> is not supported by the <see cref="IActor"/>
        ///     then the <see cref="Successor"/> will attempt to <see cref="IActor.Do{TResponse}(IUseCaseRequest{TResponse}, CancellationToken)"/>
        ///     the <see cref="IUseCaseRequest{TResponse}"/>.
        /// </summary>
        /// <typeparam name="TResponse">
        ///     The type for the response of the <see cref="IUseCaseRequest{TResponse}"/>.
        /// </typeparam>
        /// <param name="request">
        ///     The <see cref="IUseCaseRequest{TResponse}"/> to do by the <see cref="Actor"/> or its <see cref="Successor"/>.
        /// </param>
        /// <param name="cancellationToken">
        ///     Optional cancellation token for the <see cref="IUseCase{TRequest, TResponse}"/> operation.
        /// </param>
        /// <returns>
        ///     The value type wrapper around the <see cref="TResponse"/>.
        ///     The result type of which is <typeparamref name="TResponse"/>.
        /// </returns>
        /// <exception cref="InvalidOperationException">
        ///     Mediator has no receiver for the <see cref="IUseCaseRequest{TResponse}"/>.
        /// </exception>
        public async ValueTask <TResponse> Do <TResponse>(IUseCaseRequest <TResponse> request, CancellationToken cancellationToken = default)
            where TResponse
        : class
        {
            if (SupportsUseCaseWithResponse <TResponse>())
            {
                return((TResponse)await Mediator.Send(request, cancellationToken));
            }
            else if (Successor != null)
            {
                /// Since the <see cref="IUseCase{IUseCaseRequest{TResponse}, TResponse}"/> was not supported the <see cref="Successor"/>
                return(await Successor.Do(request, cancellationToken));
            }

            throw new InvalidOperationException($"{GetType().Name} does not support request {request.GetType().Name}");
        }
示例#2
0
        public bool Equals(IUseCaseRequest <TResponse> x, IUseCaseRequest <TResponse> y)
        {
            if (x is null)
            {
                return(false);
            }

            if (y is null)
            {
                return(false);
            }

            if (!ReferenceEquals(x, y))
            {
                return(false);
            }

            if (x.GetHashCode() != y.GetHashCode())
            {
                return(false);
            }

            return(true);
        }
示例#3
0
 public int GetHashCode(IUseCaseRequest <TResponse> obj)
 => obj is null ? 0 : RuntimeHelpers.GetHashCode(obj);
示例#4
0
 public bool Equals(IUseCaseRequest <TResponse> other)
 => new UseCaseRequestEqualityComparer <TResponse>().Equals(this, other);