-
-
Notifications
You must be signed in to change notification settings - Fork 66
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
Service register best practices #78
Comments
Yes, declaring services globally might create import cycles sometimes. In v2-beta6, we added support for "do.Package" -> https://do.samber.dev/docs/getting-started#register-services-using-package-declaration You can create a go get -u github.com/samber/do/v2@v2.0.0-beta.7 If you currently use v1, check the migration guide: https://do.samber.dev/docs/upgrading/from-v1-x-to-v2 I currently use v2 in my own project. You can consider it almost production-ready. Some APIs might change before release. |
Thx, I try to |
Hello samber, Maybe I didn't describe it in detail enough. I create a demo: https://github.com/iyaozhen/samber-do-learn/blob/main/service/car/car_test.go import cycle:
I should use |
Ok, i see your issue. Maybe you could move your tests to a dedicated package? 🤔 I don't know the complexity of your app, but you can also have a I don't know if this issue is related to DI, since you would have the same problem in traditional programming. Did you try with interfaces? Using |
Thank you for your patient answer. There's no particular solution for me. move your tests to a dedicated packagenot golang customary norm 2 sub-packagescar.Package do.Package(
do.Lazy(engine.NewEngine),
do.Lazy(NewCar),
) airplane.Package do.Package(
do.Lazy(engine.NewEngine),
do.Lazy(NewAirplane),
) https://github.com/iyaozhen/samber-do-learn/blob/main/service/car/car_test.go
interfaceinterface is a good way. But it will make the project more complex. In general, there is only one implementation of an interface. This is not do is problem, the same problem in traditional programming. I'll close this issue first, If there is a good solution, I will come back to update. |
I have been using
do
for a while. But I have a confused about service registera typical service:
And I add
service.Register()
function in main.go.It works, But when I testing
report
:Circular dependencies error:
I register service in test init func without
report
now.But I think it is ugly, Is there a better way? all in one
service.Register()
maybe no need to exist?Of course, this is not
do
is problem, It should be my problem with using and understanding.The text was updated successfully, but these errors were encountered: