public static IServiceCollection AddQuery <TQuery, TQueryResult, TQueryHandler>(this IServiceCollection services)
            where TQuery : class
            where TQueryHandler : class, IQueryHandler <TQuery, TQueryResult>
        {
            // add handler to DI.
            services.AddTransient <IQueryHandler <TQuery, TQueryResult>, TQueryHandler>();

            // add for discovery purposes.
            var queryMeta = new QueryMeta(typeof(TQuery), typeof(IQueryHandler <TQuery, TQueryResult>), typeof(TQueryResult));

            services.AddSingleton <IQueryMeta>(queryMeta);

            return(services);
        }
        /// <summary>
        /// Trying to add meta for pair `sqlSeed`--`query`
        /// </summary>
        /// <param name="sqlSeed">Object used as seed to builing sql query.</param>
        /// <param name="query">Query that will connected to meta data.</param>
        /// <returns>Created meta data.</returns>
        protected QueryMeta RegisterateSQLQuery(object sqlSeed, Query query)
        {
            try
            {
                QueryMeta meta = new QueryMeta()
                {
                    entryQuery = query
                };
                metaTable.Add(sqlSeed, meta);
                return(meta);
            }
            catch//(Exception ex)
            {
                // Commented because not all queries has implemented SQLQueryHandler,
                // so here will no registration of that query. That will cause a spam messages into console.
                //Console.WriteLine("ERROR: SqlQueryHandler | Query not registred." +
                //    "Details: " + ex.Message);

                return(null);
            }
        }