2 package MooseX::Singleton::Meta::Class;
4 use MooseX::Singleton::Meta::Instance;
5 use MooseX::Singleton::Meta::Method::Constructor;
7 extends 'Moose::Meta::Class';
13 my $self = $class->SUPER::initialize(
15 instance_metaclass => 'MooseX::Singleton::Meta::Instance',
16 constructor_class => 'MooseX::Singleton::Meta::Method::Constructor',
23 sub existing_singleton {
25 my $pkg = $class->name;
29 # create exactly one instance
30 if (defined ${"$pkg\::singleton"}) {
31 return ${"$pkg\::singleton"};
37 override _construct_instance => sub {
40 # create exactly one instance
41 my $existing = $class->existing_singleton;
42 return $existing if $existing;
44 my $pkg = $class->name;
46 return ${"$pkg\::singleton"} = super;
59 MooseX::Singleton::Meta::Class
63 This metaclass is where the forcing of one instance occurs. The first call to
64 C<construct_instance> is run normally (and then cached). Subsequent calls will
65 return the cached version.