16ab7e1f51fa83bb7b72881097fea9aa2c27a20b6crazyboblee/**
26ab7e1f51fa83bb7b72881097fea9aa2c27a20b6crazyboblee * Copyright (C) 2006 Google Inc.
36ab7e1f51fa83bb7b72881097fea9aa2c27a20b6crazyboblee *
46ab7e1f51fa83bb7b72881097fea9aa2c27a20b6crazyboblee * Licensed under the Apache License, Version 2.0 (the "License");
56ab7e1f51fa83bb7b72881097fea9aa2c27a20b6crazyboblee * you may not use this file except in compliance with the License.
66ab7e1f51fa83bb7b72881097fea9aa2c27a20b6crazyboblee * You may obtain a copy of the License at
76ab7e1f51fa83bb7b72881097fea9aa2c27a20b6crazyboblee *
86ab7e1f51fa83bb7b72881097fea9aa2c27a20b6crazyboblee * http://www.apache.org/licenses/LICENSE-2.0
96ab7e1f51fa83bb7b72881097fea9aa2c27a20b6crazyboblee *
106ab7e1f51fa83bb7b72881097fea9aa2c27a20b6crazyboblee * Unless required by applicable law or agreed to in writing, software
116ab7e1f51fa83bb7b72881097fea9aa2c27a20b6crazyboblee * distributed under the License is distributed on an "AS IS" BASIS,
126ab7e1f51fa83bb7b72881097fea9aa2c27a20b6crazyboblee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136ab7e1f51fa83bb7b72881097fea9aa2c27a20b6crazyboblee * See the License for the specific language governing permissions and
146ab7e1f51fa83bb7b72881097fea9aa2c27a20b6crazyboblee * limitations under the License.
156ab7e1f51fa83bb7b72881097fea9aa2c27a20b6crazyboblee */
166ab7e1f51fa83bb7b72881097fea9aa2c27a20b6crazyboblee
176ab7e1f51fa83bb7b72881097fea9aa2c27a20b6crazybobleepackage com.google.inject;
186ab7e1f51fa83bb7b72881097fea9aa2c27a20b6crazyboblee
196ab7e1f51fa83bb7b72881097fea9aa2c27a20b6crazyboblee/**
2061257a8bec21de3e0d473a8ec821b41f2e560017crazyboblee * A module contributes configuration information, typically interface
21b950ad91b9bddbe83718c8e67b04dac92e14f4dfkevinb * bindings, which will be used to create an {@link Injector}. A Guice-based
22c1d0c6490dbab5353323e8cc4e9a0e53fc4b1591crazyboblee * application is ultimately composed of little more than a set of
23c1d0c6490dbab5353323e8cc4e9a0e53fc4b1591crazyboblee * {@code Module}s and some bootstrapping code.
240bfdbc6f669cb5c3e57d4c3291dbeb573a5e1e52crazyboblee *
250bfdbc6f669cb5c3e57d4c3291dbeb573a5e1e52crazyboblee * <p>Your Module classes can use a more streamlined syntax by extending
260bfdbc6f669cb5c3e57d4c3291dbeb573a5e1e52crazyboblee * {@link AbstractModule} rather than implementing this interface directly.
2789046e7f9f9511de87d03dbd9284329b0c3ce22flimpbizkit *
2889046e7f9f9511de87d03dbd9284329b0c3ce22flimpbizkit * <p>In addition to the bindings configured via {@link #configure}, bindings
2989046e7f9f9511de87d03dbd9284329b0c3ce22flimpbizkit * will be created for all methods annotated with {@literal @}{@link Provides}.
3089046e7f9f9511de87d03dbd9284329b0c3ce22flimpbizkit * Use scope and binding annotations on these methods to configure the
3189046e7f9f9511de87d03dbd9284329b0c3ce22flimpbizkit * bindings.
326ab7e1f51fa83bb7b72881097fea9aa2c27a20b6crazyboblee */
3363b592b8c307b6034d88602d136b61a46a8c3fb7crazybobleepublic interface Module {
346ab7e1f51fa83bb7b72881097fea9aa2c27a20b6crazyboblee
357c5b2c4e5e3607c63c2785c8bc025706a158db80crazyboblee  /**
364994bf6a8e9986ca9013a908c340f019084be30flimpbizkit   * Contributes bindings and other configurations for this module to {@code binder}.
37b3a8f0bda3259af41e639f1872c42377989704d9limpbizkit   *
38b3a8f0bda3259af41e639f1872c42377989704d9limpbizkit   * <p><strong>Do not invoke this method directly</strong> to install submodules. Instead use
39b3a8f0bda3259af41e639f1872c42377989704d9limpbizkit   * {@link Binder#install(Module)}, which ensures that {@link Provides provider methods} are
40b3a8f0bda3259af41e639f1872c42377989704d9limpbizkit   * discovered.
417c5b2c4e5e3607c63c2785c8bc025706a158db80crazyboblee   */
429d573ed1c5c3f2f5d72195e013cafd545ffe38fccrazyboblee  void configure(Binder binder);
436ab7e1f51fa83bb7b72881097fea9aa2c27a20b6crazyboblee}
44