2011-12-12 4 views
0

그건 아마도 내 질문의 일부입니다.RoboGuice의 어떤 버전이 Android SDK 8에서 작동합니까?

기본적으로 나는 1.1.2 버전의 실제 주입에 어려움을 겪고 있습니다. 사이트의 몇 페이지를 읽었으며 뭔가를 놓친 것 같습니다.

기본적으로 RoboApplication 확장을 수행했습니다. addApplicationModules 메소드를 오버라이드했습니다. 나도 모듈을 만들었 어.

내 모듈은 다음과 같습니다 : 내가 거기하지 않으면

public class DataBaseAdapter implements IDataBaseAdapter 
    { 
     private DataBaseHelper _dbHelper; 

     private SQLiteDatabase _db; 

     @Inject 
     protected static Provider<Context> contextProvider; 

     public DataBaseAdapter() 
     { 
      _dbHelper = new DataBaseHelper(contextProvider.get()); 
     } 
    } 

이 어디 코드의 덩어리에 대한 좋은 기회 장소 :

내 어댑터에서
public class DataRepository extends AbstractAndroidModule 
    { 

     @Override 
     protected void configure() { 
      /* 
       * This tells Guice that whenever it sees a dependency on a TransactionLog, 
       * it should satisfy the dependency using a DatabaseTransactionLog. 
       */ 
      bind(IDataBaseAdapter.class).to(DataBaseAdapter.class); 
     } 

    } 

나는이가 ... 인젝터를 연관시키는 곳은 어디입니까? 내가 같이를 주입 속성을 사용하려고 해요

public class MyApplication extends RoboApplication 
    { 
     public MyApplication() 
     { 
      super(); 
     } 

     public MyApplication(Context context) 
     { 
      super(); 
      attachBaseContext(context); 
     } 

     @Override 
     protected void addApplicationModules(List<Module> modules) 
     { 
      modules.add(new DataRepository()); 
     } 

     @Inject 
     private IDataBaseAdapter adapter; 

     public IDataBaseAdapter getAdapter() 
     { 
      return adapter; 
     } 

     public void setAdapter(IDataBaseAdapter value) 
     { 
      adapter = value; 
     } 
      ... 
    } 

:

마지막으로 ... 내 응용 프로그램과 같이 그것의 주사를 가지고있다. 예를 들면 :

@Inject 
    private IDataProvider provider; 
내가 잃었어요 이유 몇 나는 .NET 및 플래시/액션 배경에서 온 플러스 I은 (는 .NET 세계에서) 대신해서 Ninject의 StructureMap을 사용한 적이 있다는 것입니다

, 나는 Guice가 Ninject의 아이디어 중 일부를 염두에두고 설계되었다고 들었다. 누군가가이 작은 조각을 알아낼 수있게 도와 줄 수 있습니까?

RoboGuice의 2.x로 점프하는 대신 1.1.2를 사용하는 데 집중하고 싶습니다. 아직 베타 버전이므로 특히 신경 쓰지 않기를 바랍니다.

다시 한 번 감사드립니다, 켈리

+0

위 정보가 업데이트되었습니다. 아래에서, 나를 도와 준 Konstantin Pribluda에게 감사드립니다. getInstance 메소드에 대해 그렇게 걱정하지 않지만, 모듈이로드되지 않거나 데이터가 누락 된 이유는 무엇입니까? – KellyTheDev

답변

0

확인, 내가 필요 있었는지 알아 냈어요,하지만 난 이유가 떠있는 모든 정보를보고 난 후에 아주 확실하지 않다.

나는 기본적으로이 변화를 만들었으며, 이제 나의 시험은 통과한다.나는 주입을위한 도구로 생성자를 사용하여 좋아하는 동안

public class DataBaseAdapter implements IDataBaseAdapter 
{ 
    private DataBaseHelper _dbHelper; 

    private SQLiteDatabase _db; 

    @Inject 
    public DataBaseAdapter(Provider<Context> contextProvider) 
    { 
     _dbHelper = new DataBaseHelper(contextProvider.get()); 
    } 
} 

, 내가 궁금해 그것이 내가 본 예는 반사 클래스 주입 어떤 종류의 것을 고려하고, 이런 식으로 일해야했다 왜.

어쨌든,이 부분입니다. 희망을 갖고 다른 사람이 유용하다고 생각하기를 바랍니다.

건배, 켈리

0

안드로이드는 독립/호스팅 자바 응용 프로그램에서 매우 다르다. 메인()이 없지만 안드로이드 프레임 워크 (액티비티, 서비스, 브로드 캐스트 리시버)가 관리하는 특정 액티비티 유닛이 있습니다

DI는 파트를 함께 연결하여 보일러 플레이트 코드를 제거 할 수있는 기술입니다 좋은 객체 지향 방식으로. 당신의 작품 단위로

, 당신은에서 onCreate() 메소드에 협력 객체의 배선/창조 할 것이다 주로 활동하고, onResume()와 onPause() 메소드 (actviity 라이프 사이클 참조)

전용이 있습니다 엄지의 규칙은 활동이 초점을 잃을 때마다 다시 시작해야합니까?

그리고 전체 애플리케이션 (같은 JVM에서 실행 중)에서 객체를 공유하려는 경우에는 싱글 톤 패턴을 사용하는 것이 좋습니다. 예를 들어, inResume()/onPause() 안드로이드에. 그래서 당신은 싱글 인젝터 공장을 가지고 있고, 모든 곳에서 그것을 cosult 수

InjectorFactory.getInstance(<context if necessary?>).getInstance(whatever you need); 
+0

답변 해 주셔서 감사합니다. getInstance 메서드를 이해합니다. 유감 스럽지만, 더 명확하게하지는 못했지만, 자동 주입 방식으로 "주입"을 시도했습니다 ... 예 : @Inject private IDataProvider provider; 모듈에서이 항목을 다음과 같이 선언합니다. bind (IDataProvider .class) .to (DataProvider.class); – KellyTheDev

+0

나는 명확성을 위해 여기에 쓴 예제를 포함하기 위해 위의 예제를 업데이트했다. – KellyTheDev

관련 문제