package xapi.annotation.inject;
import xapi.annotation.reflect.MirroredAnnotation;
import xapi.enviro.Enviro;
import xapi.util.api.MatchesValue;
import xapi.util.matchers.MatchesAll;
import xapi.util.matchers.MatchesNone;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* The successor to the deprecated {@link InstanceDefault}, {@link InstanceOverride} and Singleton counterparts.
*
* This injection annotation is applied to any type in order to alert the InjectionService
* that the type with this annotation is a candidate for injection for the given
*
*
* @author "James X. Nelson (james@wetheinter.net)"
*
*/
@Target(value=ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@MirroredAnnotation
public @interface XInject {
class None extends MatchesNone<Enviro>{}
class All extends MatchesAll<Enviro>{}
Class<? extends MatchesValue<Enviro>> isInstance() default All.class;
int instancePriority() default Integer.MIN_VALUE;
Class<? extends MatchesValue<Enviro>> isService() default None.class;
int servicePriority() default Integer.MIN_VALUE;
Class<?> value();
}