public SearchService(IMapper mapper,
                             SPNDbContext dbContext,
                             IMakeService makeService,
                             ValidatePrimaryPropertiesSearch primaryPropertiesValidator,
                             ValidateInteriorSearch interiorsValidator,
                             ValidateInteriorMaterialsSearch interiorMaterialsvalidator,
                             ValidateSafetySearch safetyValidator,
                             ValidateSpecializedFeaturesSearch specializedFeaturesValidator,
                             ValidateSuspensionsSearch suspensionsValidator,
                             ValidateExtraFeaturesSearch extraFeaturesValidator)
            :

            base(mapper, dbContext)
        {
            this.makeService = makeService;
            this.primaryPropertiesValidator   = primaryPropertiesValidator;
            this.interiorsValidator           = interiorsValidator;
            this.interiorMaterialsvalidator   = interiorMaterialsvalidator;
            this.safetyValidator              = safetyValidator;
            this.specializedFeaturesValidator = specializedFeaturesValidator;
            this.suspensionsValidator         = suspensionsValidator;
            this.extraFeaturesValidator       = extraFeaturesValidator;
        }
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext <SPNDbContext>(options =>
                                                 options.UseSqlServer(
                                                     Configuration.GetConnectionString("DefaultConnection")));

            services.AddIdentity <User, IdentityRole>()
            .AddEntityFrameworkStores <SPNDbContext>()
            .AddDefaultTokenProviders();

            services.Configure <IdentityOptions>(options =>
            {
                // Password settings.

                options.Password.RequireDigit           = false;
                options.Password.RequireLowercase       = false;
                options.Password.RequireNonAlphanumeric = false;
                options.Password.RequireUppercase       = false;
                options.Password.RequiredLength         = 3;
                options.Password.RequiredUniqueChars    = 0;

                options.User.RequireUniqueEmail = false;
            });

            services
            .ConfigureApplicationCookie(options =>
            {
                options.LoginPath  = "/Identity/Account/Login";
                options.LogoutPath = "/Identity/Account/Logout";
            });

            services.AddAutoMapper(AutoMapperConfig.GetAutoMapperProfilesFromAllAssemblies()
                                   .ToArray());
            services.AddScoped <SPNUserRoleSeeder>();
            services.AddScoped <SPNCategorySeeder>();
            services.AddScoped <SPNConciseAutoSeed>();

            //Forum Services
            services.AddScoped <ICategoryService, CategoryService>();
            services.AddScoped <IPostService, PostService>();
            services.AddScoped <IUserService, UserService>();
            services.AddScoped <IReplyService, ReplyService>();
            services.AddScoped <IQuoteService, QuoteService>();


            //Auto Services
            services.AddScoped <IMakeService, MakeService>();
            services.AddScoped <IModelService, ModelService>();
            services.AddScoped <IAutoService, AutoService>();
            services.AddScoped <ISearchService, SearchService>();



            // Cloudinary Setup
            var cloudinaryAccount = new CloudinaryDotNet.Account(CloudinaryConfig.CloudName, CloudinaryConfig.ApiKey, CloudinaryConfig.ApiSecret);
            var cloudinary        = new Cloudinary(cloudinaryAccount);

            services.AddSingleton(cloudinary);

            //Helpers Setup
            var imagesHelper = new ImagesHelper();

            var primaryPropertiesValidator   = new ValidatePrimaryPropertiesSearch();
            var interiorsValidator           = new ValidateInteriorSearch();
            var interiorMaterialsvalidator   = new ValidateInteriorMaterialsSearch();
            var safetyValidator              = new ValidateSafetySearch();
            var specializedFeaturesValidator = new ValidateSpecializedFeaturesSearch();
            var suspensionsValidator         = new ValidateSuspensionsSearch();
            var extraFeaturesValidator       = new ValidateExtraFeaturesSearch();

            services.AddSingleton(imagesHelper);

            services.AddSingleton(imagesHelper);
            services.AddSingleton(primaryPropertiesValidator);
            services.AddSingleton(interiorsValidator);
            services.AddSingleton(interiorMaterialsvalidator);
            services.AddSingleton(safetyValidator);
            services.AddSingleton(specializedFeaturesValidator);
            services.AddSingleton(suspensionsValidator);
            services.AddSingleton(extraFeaturesValidator);


            services.AddControllersWithViews();
            services.AddRazorPages();
        }