Git Product home page Git Product logo

Comments (5)

samber avatar samber commented on June 12, 2024

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 do.Package in ***/biz/service/ for a subset of your app.

go get -u github.com/samber/do/[email protected]

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.

from do.

iyaozhen avatar iyaozhen commented on June 12, 2024

Thx, I try to do.Package.
I used v2 in production for some time, it is very good.

from do.

iyaozhen avatar iyaozhen commented on June 12, 2024

Hello samber, do.Package doesn't seem to solve my problem.

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

image

import cycle:

package github.com/iyaozhen/samber-do-learn/service/car
	imports github.com/iyaozhen/samber-do-learn/service
	imports github.com/iyaozhen/samber-do-learn/service/car: import cycle not allowed in test

TestCar_Start_V2 It is work, but I will add lots of do.Provide.

service/register.go, Should it not exist?

I should use do.Package in car? But engine used in a other car2 service, car and car2 Lazy/Provide Duplicate?

from do.

samber avatar samber commented on June 12, 2024

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 do.Package in 2 sub-packages (here: service/engine/ and service/car/) and import them in tests: do.New(engine.Pkg, car.Pkg).

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 do.InvokeAs might prevent some troubles.

from do.

iyaozhen avatar iyaozhen commented on June 12, 2024

Thank you for your patient answer. There's no particular solution for me.

move your tests to a dedicated package

not golang customary norm

2 sub-packages

car.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

panic: DI: service `*/service/engine.Engine` has already been declared

interface

interface 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.

from do.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.