public TQueryBuilder CreateProxyInterceptor <TModel, TQueryBuilder>(
            RepositoryConfiguration config,
            MongoCollection collection)
            where TQueryBuilder : class, IQueryBuilder <TModel>
            where TModel : class
        {
            var customMethods = this.GetOrAddMethods <TQueryBuilder>();

            var sharedIntermediateQueryData = new IntermediateQueryDataContainer();
            var queryBuilder = new StandardQueryExecutor <TModel>(config, collection, sharedIntermediateQueryData);
            var interceptor  = new QueryInterceptor <TModel>(queryBuilder, this.Parser, sharedIntermediateQueryData);
            var proxy        = _generator.CreateInterfaceProxyWithoutTarget <TQueryBuilder>(interceptor);

            return(proxy);
        }
 public QueryInterceptor(StandardQueryExecutor <TModel> queryBuilder, MethodConventionParser parser, IntermediateQueryDataContainer queryData)
 {
     this.QueryBuilder = queryBuilder;
     this.QueryData    = queryData;
     this.Parser       = parser;
 }