问题
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?
回答1:
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.
来源:https://stackoverflow.com/questions/5791423/inject-the-same-component-with-different-parameters-with-guice