2013-08-26 32 views
0

HI我來自C#/。NET的背景,並學會了使用一些Android.Now我開始構建一個小應用程序的樂趣,我想學習一個IoC框架。經過一番討論後,我發現roboguice.But我無法弄清楚如何整合它。上。Robus的注入器注入進入無限循環

NET我已經與Ninject和Unity合作過,並且希望創建一個類似形式的構造函數注入,我從這些框架中獲得。

這是我有這麼遠,我想我已經想通了:

該類代表應用程序引導程序,這裏是我要在那裏註冊我的依賴配置類:

public class IOCApplication extends Application{ 

@Override 
public void onCreate(){ 
    super.onCreate(); 
    RoboGuice.setBaseApplicationInjector(this, RoboGuice.DEFAULT_STAGE, RoboGuice.newDefaultRoboModule(this), new IOCModule()); 
} 

}

這是相關配置類:

public class IOCModule implements Module{ 

     @Override 
     public void configure(com.google.inject.Binder binder) { 
      binder.bind(ITest.class).to(Test.class); 
     } 
    } 

在我AndroidManifest我已經加入這個:

<application ... android:name="com.example.project2.IOCApplication"> 

這部分我不真的understad爲什麼我不得不添加,但我想這件事情告訴Android版IOCApplication應首先isntantiated。

這是CLAS我MainActivily類和我已經加入了它的構造函數:

public ITest test; 
public MainActivity(ITest test){ 
    this.test = test; 
} 

當我嘗試在Android設備上runthis它看起來像應用程序正進入一個無限循環和我不要認爲ITest得到實例化。

我在做什麼錯?

回答

1

有一點要知道,Android是你沒有實例化你自己的活動,它是這樣的系統。

因此,您不能對活動使用構造函數注入。 但是,您可以使用更清晰的IMO屬性注入。

擴展RoboActivity類是使用Activity注入的最簡單方法。 RoboGuice爲其他Android組件(RoboFragmentRoboService等)類似的類

public class MyActivity extends RoboActivity { 

    @Inject 
    ITest test; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // You can now use your test instance 
    } 

} 

super.onCreate(savedInstanceState);被調用後與@Inject所有屬性將被實例化。


隨着POJO(普通Java對象),你有更多的選擇:

屬性注入

public class Test { 
    @Inject 
    private Service1 service1; 
    @Inject 
    private Service2 service2; 

    public Test() { 
    } 
} 

構造方法注入

public class Test { 

    private Service1 service1; 
    private Service2 service2; 

    @Inject 
    public Test(Service1 service1, Service2 service2) { 
     this.service1 = service1; 
     this.service2 = service2; 
    } 
} 

請注意,如果您的構造函數具有參數,則它必須具有@Inject註釋。


您需要這條線<application ... android:name="com.example.project2.IOCApplication">告訴您正在使用擴展Application類系統。沒有它,Android將使用基類。

我建議您閱讀official documentation瞭解更多信息。