简体   繁体   中英

Inject the same component with different parameters with Guice

I have a Class which represents a graphical Component. This component displays data from the database.

Now I have some kind of dashboard, which has 12 of my Components above. Of course I want to reuse this component! So I thought, I could use a Custom Annotation with parameters and pass the parameters to a provider. I found some hack on Stackoverflow (http://stackoverflow.com/questions/5704918/custom-guice-binding-annot...) but to be honest, I did not find any documentation how to implement an AnnotationImpl for my Custom Interface.

I do not think, that AssistedInject is what I need here, because I do not like the idea to inject 12x the same Class via AssistedInjection to my constructor.

A No-Go for me is to write an Interface and 12 implementation classes, just for one different parameter.

Has anyone an idea for my issue?

I'm not exactly clear on what you're trying to do, but i think Assisted inject might be right for you. Can you not create a ComponentFactory and then, in it's create method, specify this parameter you need? You don't even need to create a concrete implementation of the Factory as Guice will do that for you and you can specify it like this:

install(new FactoryModuleBuilder().build(ComponentFactory.class));

ComponentFactory would look like this:

public interface ComponentFactory {
    Component create(ParameterType parameter);
}

And the Component itself like this:

public class Component {
    @Inject
    public WebClient(@Assisted ParameterType parameter, OtherService service) {
        // etc...
    }
}

Then you pass the ComponentFactory to your Dashboard and it can create (easily) whatever Components it wants.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM