Je tente d'écrire un rôle singleton en utilisant Perl et Moose. Je comprends qu'un module MooseX :: Singleton est disponible mais il y a toujours de la résistance quand on demande un autre module CPAN pour notre projet. Après avoir essayé cela et avoir un peu de mal je voudrais comprendre pourquoi ma méthode ne fonctionne pas. Le rôle singleton je l'ai écrit est la suivante:Singleton Roles in Moose
package Singleton;
use Moose::Role;
my $_singleInstance;
around 'new' => sub {
my $orig = shift;
my $class = shift;
if (not defined $_singleInstance){
$_singleInstance = $class->$orig(@_);
}
return $_singleInstance;
};
sub getInstance
{
return __PACKAGE__->new();
}
1;
Cela semble fonctionner à trouver quand une seule classe utilise le rôle singleton. Toutefois, lorsque deux classes (ClassA et ClassB par exemple) utilisent le rôle Singleton, elles apparaissent toutes deux faisant référence à une variable $ _singleInstance partagée. Si j'appelle ClassA-> getInstance, il renvoie une référence à un objet ClassA. Si j'appelle ClassB-> getInstance plus tard dans le même script, il renvoie une référence à un objet de type ClassA (même si j'ai clairement appelé la méthode getInstance pour ClassB). Si je n'utilise pas de rôle et copiez et collez le code du rôle Singleton dans ClassA et ClassB, cela semble fonctionner correctement. Que se passe t-il ici?
Vous réalisez que l'emballage «nouveau» demande simplement un monde de blessures, n'est-ce pas? – Ether