/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

package com.epam.dlab;

import com.google.inject.AbstractModule;
import io.dropwizard.setup.Environment;

/**
 * The base class for an application configuration of service.
 */
public abstract class ModuleBase<T extends ServiceConfiguration> extends AbstractModule {
	/** Application configuration of service. */
	protected T configuration;
	/** Environment of service. */
	protected Environment environment;

	/** Instantiates an application configuration of service.
	 * @param configuration application configuration of service.
	 * @param environment environment of service.
	 */
	public ModuleBase(T configuration, Environment environment) {
        this.configuration = configuration;
        this.environment = environment;
    }
}
