I'm currently using Guice in my App. However i find myself mostly using assisted inject because there is a chain of injected objects that all depend on what was the input of the program. Hence almost everything is assisted inject.
For instance A need B who need c who need Z which needs input from the command line. In the end i feel like everything will be assisted injected. So given that i'm stuck with it i want to be sure that i m using it right.
I personally feel like writing my own factories would be as good. Moreover, in addition to the same advantage i could further limit the creation of my objects in question to these factories.
Hence my question here is, how useful is it really to use assisted inject, is it only the idea of having things assisted and non assisted as the same time? What if like in my case you have only have assisted parameters?
Their must be some gain at organizing it with assisted injection. I just don't see it.
If anyone could enlighten me here, i would greatly i appreciate,
Many thanks
PS:
My dependency is as such:
I have an InfrastructureService, which require a KnowledgeBaseService which in turn require an ConFigDataObject. My configDataObject contains information coming from the inputs of the program. The configDataObject store these information after doing some validation and processing on those inputs. For instance a string representing file path can be provided to it, and it will validate that it is file that exist, and have a getter method that return that File to its consumer. Other things might be URLNname to real URL Object, and so on.
The important point here is this following graph: InfrastructureService -> KnowledgeBaseService -> ConFigDataObject -> InputData
Therefore the InfrastructureService can only work with a knowledgeBaseService that is started with the right inputFile, URL, workingfolder and etc.... which is provided to it with a configDataObject, that receive them from the input of the program and store a processed version of them.
Therefore as of now what i do is to have a assistedFactory to create the knowledgeBaseService. It takes as parameter the ConfigDataObject. The configDataObject is created with a factoryMethod (Scala Companion Object). Finally, the an assistedFactory is also create for the InfrastructureService which takes as parameter for its creation method a KnowledgeBaseService.
As you can guess everything is pretty much created upfront, and somehow manually. I find it odd.