001    package com.hammurapi.util;
002    
003    /**
004     * Context which can be modified.
005     * @author Pavel Vlasov.
006     *
007     */
008    public interface MutableContext extends Context {
009            
010            /**
011             * Binds named object.
012             * @param name Object name.
013             * @param obj Object reference. Cannot be null.
014             */
015            void bind(String name, Object obj);
016            
017            /**
018             * Unbinds named object.
019             * @param name
020             * @return Object previously bound to given name.
021             */
022            Object unbind(String name);
023            
024            /**
025             * Registers service.
026             * @param <T> Service implementation type.
027             * @param type Service type.
028             * @param service Service instance.
029             */
030            <T> void register(Class<? super T> type, T service);
031            
032            /**
033             * Removes service registration.
034             * @param <T>
035             * @param type
036             * @param service
037             */
038            <T> void unregister(Class<? super T> type, T service);
039    }