Skip to content

Instantly share code, notes, and snippets.

@Ceasar
Created August 28, 2014 21:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Ceasar/86d3ca2a585d1add1a7f to your computer and use it in GitHub Desktop.
Save Ceasar/86d3ca2a585d1add1a7f to your computer and use it in GitHub Desktop.
Different ways to resolve dependencies
# Manual constructor injection
class Charlie:
pass
class Beta:
def __init__(self, charlie):
self.charlie = charlie
class Alpha:
def __init__(self, beta):
self.beta = beta
a = Alpha(Beta(Charlie()))
# Manual setter injection
a = A()
a.x = 1
# Factory
class Charlie:
pass
class Beta:
def __init__(self, charlie):
self.charlie = charlie
class Alpha:
def __init__(self, beta):
self.beta = beta
class BetaFactory:
def make(self):
return Beta(Charlie())
class AlphaFactory:
def make(self):
return Alpha(BetaFactory().make())
a = AlphaFactory().make()
# ???
class Charlie:
pass
class Beta:
def __init__(self):
self.charlie = Charlie()
class Alpha:
def __init__(self):
self.beta = Beta()
a = Alpha()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment