-
Notifications
You must be signed in to change notification settings - Fork 20
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
magicbot needs to inject before the constructor, or provide an initialization function #21
Comments
The feature would be useful. Here is my use case Use case: I have a SwerveDrive class that coordinates four SwerveModules. I would like to add them to a dictionary with labels |
I fixed this by using the setup() function from magic components. |
One solution to this that occurs to me is that when magicbot is creating an instance, it could create at runtime a subclass of the instance class, and override |
Here's an crazy idea: we do DI on the constructor arguments. i.e. instead of this: class Component:
spam: Egg
ham: Egg One would have this: class Component:
def __init__(self, spam: Egg, ham: Egg):
... The user would then be responsible for setting the attributes in the constructor themselves. Obvious caveat here is that you can't have cyclic dependencies like this, but I suppose you really shouldn't in the first place? |
That's a neat idea, but adds boilerplate because the user would need to set the attributes themselves. |
Can't believe I never thought of this until now, but it seems you can call
Prints out
|
Looking back at this, I'm still a fan of the DI on
Good thing |
With #204 we now do dependency injection when instantiating components, in addition to the existing behaviour. It still needs to be documented though. We may also want to reverse the order in which components are instantiated to make it more useful, although that may be confusing when looking at startup logs? |
If this isn't done, then it makes it very difficult to do one-time initialization that involves other components (such as motors), though arguably it should be done in robot.py?
The text was updated successfully, but these errors were encountered: