2013-08-26 23 views
8

Hala Guice için yeni ve herhangi bir DI çerçevesini daha önce kullanmadım. Resmi vikini ve diğer birçok belgeyi okuduktan sonra hala kafamı tamamen kapatamıyorum.Guice - Statik yardımcı yöntemlerle bir sınıfa bağımlılık enjekte edin

Özel durumumda, diğer (enjekte edilecek) sınıfları kullanan bir EL taglib işlevi yazmak istiyorum. Tüm taglib işlevlerinin statik olarak bildirilmesi gerektiğinden, yalnızca yapıcı veya düzenleyici aracılığıyla bağımlılığımı enjekte edemiyorum. http://code.google.com/p/google-guice/wiki/Injections#Static_Injections'de açıklanan requestStaticInjection() yöntemini kullanmayı düşündüm ancak işe yaramayabilir ve iyi bir eğitici bulamadım. Herhangi bir yardım için şimdiden

sayesinde

Arman

O Guice belgelere göre çok daha net almaz ama burada statik enjeksiyon nasıl kullanabileceğine ilişkin bir örnek gösterilmektedir bir birim test var
+2

"Çalışmayı başaramıyorum" Ne denediniz? –

cevap

16

:

public class StaticInjectionExample { 

    static class SomeClass {} 

    static class TagLib{ 
    @Inject 
    static SomeClass injected; 

    public static void taglibFunction(String foo) { 
     injected.something(foo); 
    } 

    } 

    static class TestModule extends AbstractModule { 
    @Override 
    protected void configure() { 
     requestStaticInjection(TabLib.class); 
    } 
    } 

    @Test 
    public void test() { 
    Injector injector = Guice.createInjector(new TestModule()); 
    TagLib receiver = injector.getInstance(TagLib.class); 
    // Do something with receiver.injected 
    } 
} 
+0

Yanıtınız için teşekkürler. Onu deneyeceğim. Ancak bu, diğer Enjektörler tarafından enjekte edilen herhangi bir bağımsızlığı onurlandıracak mı? Örneğin, enjekte edilen sınıf @Singleton olarak işaretlenmişse Guice aynı örneği kullanır mı? – Arman

+0

"Diğer enjektörler" ile ne demek istediğinden emin değilim. Eğer 'Injected' seçeneğini 'Singleton' olarak bağlarsanız, o zaman tüm modül için enjeksiyon sırasında (statik enjeksiyon dahil) bu tek örnek kullanılacaktır. – condit

+0

Guice belgelerine göre normalde, bir Web projesinde, bir ServletContextListener GuiceServletContextListener öğesinin içinde bir Enjektör oluşturursunuz. Yani eğer bir sınıfın içinde ek bir Enjektör oluşturursam Guice, "ServletContextListener-Injector" ile aynı @Singleton sınıfını enjekte edecek mi? – Arman

İlgili konular