|
using Application.Core.Specification.Contract;
using Application.Core.Specification.Common;
using System;
using System.Linq.Expressions;
namespace Application.Core.Specification
{
/// <summary>
/// A logic AND Specification
/// </summary>
/// <typeparam name="T">Type of entity that check this specification</typeparam>
public sealed class AndSpecification<T> : CompositeSpecification<T> where T : class
{
#region Members
private ISpecification<T> _RightSideSpecification = null;
private ISpecification<T> _LeftSideSpecification = null;
#endregion
#region Public Constructor
/// <summary>
/// Default constructor for AndSpecification
/// </summary>
/// <param name="leftSide">Left side specification</param>
/// <param name="rightSide">Right side specification</param>
public AndSpecification(ISpecification<T> leftSide, ISpecification<T> rightSide)
{
if (leftSide == (ISpecification<T>)null)
throw new ArgumentNullException("leftSide");
if (rightSide == (ISpecification<T>)null)
throw new ArgumentNullException("rightSide");
this._LeftSideSpecification = leftSide;
this._RightSideSpecification = rightSide;
}
#endregion
#region Composite Specification overrides
/// <summary>
/// Left side specification
/// </summary>
public override ISpecification<T> LeftSideSpecification
{
get { return _LeftSideSpecification; }
}
/// <summary>
/// Right side specification
/// </summary>
public override ISpecification<T> RightSideSpecification
{
get { return _RightSideSpecification; }
}
/// <summary>
/// Implementation for method SatidfiedBy
/// </summary>
/// <returns></returns>
public override Expression<Func<T, bool>> SatisfiedBy()
{
Expression<Func<T, bool>> left = _LeftSideSpecification.SatisfiedBy();
Expression<Func<T, bool>> right = _RightSideSpecification.SatisfiedBy();
return (left.And(right));
}
#endregion
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.