2011-06-22 8 views
17

Mam ogólne klasy dostępu do bazy danych, które wiążę przy użyciu konstruktu TypeLiteral. Teraz w teście chcę wyśmiać tę klasę i dlatego stworzyłem dostawcę, który tworzy fałszywą instancję. W moim teście chcę uzyskać dostęp do tej próby, aby określić jej zachowanie. Teraz pytanie brzmi: jak mogę odzyskać obiekt z wtryskiwacza?Guice: Jak uzyskać instancję generic owiniętego TypeLiteral?

To moja definicja wiążąca:

binder.bind(new TypeLiteral<GenericDbClass<Integer>>(){}).GenericDbClassProvider.class); 

Normalnie byłoby uzyskać instancji tak:

injector.getInstance(GenericDbClass.class); 

Ale ponieważ nie jestem wiążące realizację GenericDbClass do samego interfejsu, I don Nie wiem jak to zrobić. Czy myślę, że to skomplikowane?

Wszelkie pomysły/pomoc są mile widziane!

+0

Jako rozwiązanie krótkoterminowe właśnie rozszerzyłem ogólny interfejs o konkretną definicję, dzięki czemu mogę teraz uzyskać instancję. Nadal istnieje sposób, aby wykonać zadanie w bardziej ogólny sposób? –

Odpowiedz

37

Użyj narzędzia Guice w Key, który jest przeznaczony dla dokładnie tego rodzaju problemu. W twoim przypadku

injector.getInstance(Key.get(new TypeLiteral<GenericDbClass<Integer>>(){}); 

załatwi sprawę.

+14

'injector.getInstance (nowy klucz >() {})' będzie działał również, jeśli nie trzeba podawać adnotacji wiążącej. – ColinD

Powiązane problemy