Inject the same component with different parameters with Guice

徘徊边缘 提交于 2019-12-12 14:57:05

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!