1 16 17 package com.google.inject; 18 19 import com.google.inject.BinderImpl.CreationListener; 20 21 24 class BoundProviderFactory<T> 25 implements InternalFactory<T>, CreationListener { 26 27 final Key<? extends Provider<? extends T>> providerKey; 28 final Object source; 29 private InternalFactory<? extends Provider<? extends T>> providerFactory; 30 31 BoundProviderFactory( 32 Key<? extends Provider<? extends T>> providerKey, 33 Object source) { 34 this.providerKey = providerKey; 35 this.source = source; 36 } 37 38 BoundProviderFactory( 39 Key<? extends Provider<? extends T>> providerKey, 40 InternalFactory<? extends Provider<? extends T>> providerFactory, 41 Object source) { 42 this.providerKey = providerKey; 43 this.providerFactory = providerFactory; 44 this.source = source; 45 } 46 47 public void notify(final InjectorImpl injector) { 48 injector.withDefaultSource(source, new Runnable () { 49 public void run() { 50 providerFactory = injector.getInternalFactory(null, providerKey); 51 } 52 }); 53 } 54 55 public String toString() { 56 return providerKey.toString(); 57 } 58 59 public T get(InternalContext context) { 60 return providerFactory.get(context).get(); 61 } 62 } 63 | Popular Tags |