Skip to content

Instantly share code, notes, and snippets.

@tadzik
Created August 25, 2011 18:15
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save tadzik/1171350 to your computer and use it in GitHub Desktop.
Dependency Injection in Panda
use IoC;
say 'running';
class Pies {};
class Panda is Pies {
has $!srcdir;
has $!destdir;
has $!statefile;
has $!projectsfile;
has $!resources;
};
class Panda::Ecosystem {
has $!statefile;
has $!projectsfile;
has %!projects;
has %!states;
};
class Panda::Fetcher {
has $!resources;
};
class Panda::Builder {
has $!resources;
};
class Panda::Tester {
has $!resources;
};
class Panda::Installer {
has $!resources;
has $!destdir;
};
class Panda::Resources {
has $!srcdir;
};
my $pandadir = %*ENV<HOME> ~ '/.panda';
my $c = container 'panda' => contains {
service 'srcdir' => "$pandadir/src";
service 'destdir' => %*ENV<HOME> ~ '/.perl6';
service 'statefile' => "$pandadir/state";
service 'projectsfile' => "$pandadir/projects.json";
service 'ecosystem' => {
type => Panda::Ecosystem,
lifecycle => 'Singleton',
dependencies => {
statefile => 'statefile',
projectsfile => 'projectsfile'
},
};
service 'resources' => {
type => Panda::Resources,
lifecycle => 'Singleton',
dependencies => { srcdir => 'srcdir'},
};
service 'fetcher' => {
type => Panda::Fetcher,
lifecycle => 'Singleton',
dependencies => { resources => 'resources' },
};
service 'builder' => {
type => Panda::Builder,
lifecycle => 'Singleton',
dependencies => { resources => 'resources' },
};
service 'tester' => {
type => Panda::Tester,
lifecycle => 'Singleton',
dependencies => { resources => 'resources' },
};
service 'installer' => {
type => Panda::Installer,
lifecycle => 'Singleton',
dependencies => { resources => 'resources' },
};
};
say $c.resolve('resources').perl;
say $c.resolve('destdir').perl;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment