2010-04-18 12 views
-3

À mon niveau d'expérience avec Unity, il pourrait être plus rapide de se demander si le bogue «gestion des génériques» reconnu par ctavares back in 2008 a été corrigé dans une version publique.L'équipe Unity a-t-elle corrigé ce bug de "manipulation de génériques" en 2008?

Voici était le problème (qui pourrait être mon problème aujourd'hui):

Salut,

je reçois une exception lorsque vous utilisez ....

container.RegisterType (typeof (IDictionary <,>), typeof (Dictionnaire <,>));

L'exception est ...

"Résolution de la dépendance a échoué, type = \" IDictionary 2\", name = \"\". Exception message is: The current build operation (build key Build Key[System.Collections.Generic.Dictionary 2 [System.String, System.String], null]) a échoué: La version actuelle opération (build clé construire clé [System.Collections.Generic.Dictionary a plusieurs constructeurs de longueur 2. Impossible de lever l'ambiguïté.

Lorsque je tente ...

IDictionary myExampleDictionary = container.Resolve>();

Voici la réponse était modérée:

Il n'y a pas de livres qui vous aideront, l'unité est un peu trop nouvelle pour les éditeurs ont pris encore. Malheureusement, vous avez rencontré un bug dans la gestion de nos génériques. Ceci est actuellement corrigé dans notre version interne, mais il faudra un peu de temps avant que nous puissions sortir les bits. En attendant, comme une solution de contournement que vous pourriez faire quelque chose comme ceci:

public class WorkaroundDictionary: Dictionnaire { WorkaroundDictionary public() {}}

container.RegisterType (typeof (IDictionary <,>) , typeof (WorkaroundDictionary <,>)); Le WorkaroundDictionary n'a que le constructeur par défaut, donc il n'injectera pas de problème. Comme le reste de votre application est écrit en termes d'IDictionary, lorsque nous aurons fini la version corrigée, vous pourrez simplement remplacer l'enregistrement par la véritable classe Dictionary, abandonner la solution de contournement et tout fonctionnera encore.

Désolé pour le bogue, il va être bientôt réparé!

+2

Le meilleur moyen sera de simplement le tester. –

+0

** le plus rapide ** moyen de savoir est de le tester - et ensuite répondre à votre propre question. –

+1

Tom et Sky vos hypothèses sont idéalistes: considérer la possibilité que je reçois des erreurs dans le code en ce moment qui sont similaires à ce problème de 2008 --- cela signifie effectivement que mes "tests" ont couru. Maintenant, le point délicat est que mes erreurs sont dues à ce bug de 2008 ou est-ce autre chose? Je suppose que peu de nos "esprits brillants" envisageront réellement cette possibilité. Alors regardons jusqu'où Jeff et les garçons laisseront mes points tomber que cette question est rejetée par la "sagesse" de la foule. – rasx

Répondre

1

Selon l'équipe Unité:

Je voulais juste laisser les gens savent que nous avons les bits qui libérés ont les génériques fixe en eux. Jetez un oeil et laissez-nous savoir ce que vous pensez. C'est vérifié dans le contrôle de codeplex source.

Vous devrez peut-être obtenir la dernière source et vous construire (2.x) car le correctif de bogue n'a peut-être pas encore été empaqueté.

+0

Lorsque je lance container.'RegisterType (typeof (IDictionary <,>), typeof (Dictionnaire <,>)); 'Je ne * * reçois pas d'exception. Cela doit signifier que le bug est corrigé! Wow, pourquoi ai-je posé la question en premier lieu? [Le sarcasme mesquin ici jusqu'à ce que la vraie question soit digne d'une réponse.] – rasx

+0

Je ne suis pas exactement sûr de ce que vous attendez d'autre. L'équipe de l'unité dit que le bug a été corrigé dans la source, j'ai suggéré que si vous le voyez toujours pour obtenir la dernière source et voir si elle existe toujours. –