Thanks, stl!
First of all I would not inject a model. Model classes are not meant to be
> handled with DI.
>
Could you please elaborate this point of view a little further?
> Second you can use assisted injection to use constructor injection if you
> have both parameters and dependencies in a constructor.
>
I'm trying to keep it as simple as possible and avoid creating several
classes per one controller piece. Still thanks, that's a good alternative
to keep in mind if I don't figure this out.
> Something happens before your framework calls injectMembers(). This
> something triggers the listener.propertyChange() method.
>
That's the problem: the listener is only triggered by a model, and it's
only added to a model in init() method. And the important thing to mention
is that if I move instantiation of a listener from a field declaration to
an init() method just prior to adding this listener to a model, not
touching any other code - then everything works like a charm.
Still looking for an explanation to it, though. Thanks for your input
anyway, I'll try debugging it through the setter method.
> On 28.11.2017 11:54, Evgeny Chesnokov wrote:
>
> Hi all!
>
>
> I'm having a problem with Guice injection in one particular corner-case. I
> use Guice to inject model to the controller instances that are
> parameterized in the constructor, hence I'm using #bindMembers() and not
> the constructor injection. It seems that if a model callback field in the
> controller instance was instantiated before #bindMembers() call, then it
> fails to see the injected model classes. Here's a quick sample:
>
> class MyController extends MyAbstractController {
> private int param;
>
> @Inject private MyModel model;
>
> private /*could also be final*/ PropertyChangeListener listener =
> new PropertyChangeListener() {
> @Override public void propertyChange( PropertyChangeEvent evt ) {
> model.doStuff(); *// fails with NPE because model is null!*
> }
> };
>
> public MyController(int param) {
> this.param = param;
> }
>
> // Injector#injectMembers(myController) gets called by my framework and
> then myController#init()
> public init() {
> model.addPropertyChangeListener("prop", listener); // *does NOT fail*
> with NPE during initialization
> }
> }
>
> So I've been wondering which internal mechanims I keep missing that allow
> for this kind of a strange behaviour? Any ideas welcome.
>
>
> Thanks in advance,
> Evgeny.
> --
> You received this message because you are subscribed to the Google Groups
> "google-guice" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected] <javascript:>.
> To post to this group, send email to [email protected]
> <javascript:>.
> Visit this group at https://groups.google.com/group/google-guice.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/google-guice/e66a5a5e-5fad-4605-9ae7-71b2634212d0%40googlegroups.com
>
> <https://groups.google.com/d/msgid/google-guice/e66a5a5e-5fad-4605-9ae7-71b2634212d0%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>
>
>
--
You received this message because you are subscribed to the Google Groups
"google-guice" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/google-guice.
To view this discussion on the web visit
https://groups.google.com/d/msgid/google-guice/fa69defe-e118-4a35-a004-49289f925099%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.