public TBuilder FilterWith <TFilter, TBaseRequest, TBaseEntity>() where TBaseEntity : class where TFilter : IFilter <TBaseRequest, TBaseEntity> { if (!typeof(TBaseRequest).IsAssignableFrom(typeof(TRequest))) { throw new ContravarianceException(nameof(FilterWith), typeof(TBaseRequest), typeof(TRequest)); } if (!typeof(TBaseEntity).IsAssignableFrom(typeof(TEntity))) { throw new ContravarianceException(nameof(FilterWith), typeof(TBaseEntity), typeof(TEntity)); } return(AddRequestFilter(TypeFilterFactory.From <TFilter, TBaseRequest, TBaseEntity>())); }