77 votes

IUnityContainer.Resolve <T> émet une erreur prétendant qu'il ne peut pas être utilisé avec des paramètres de type

Hier, j'ai mis en place le code:

CustomerProductManager productsManager = container.Resolve<CustomerProductManager>();

Il est compilable et de travail.

Aujourd'hui (probablement j'ai modifié quelque chose), je suis constamment à l'obtention de l'erreur:

La non-méthode générique "Microsoft.Les pratiques.De l'unité.IUnityContainer.Résoudre(Le Système.Type, string, params Microsoft.Les pratiques.De l'unité.ResolverOverride[])' ne peut pas être utilisé avec des arguments de type

Ma collègue a le même code source et n'ont pas la même erreur. Pourquoi? Comment résoudre le problème?

P. S.

ligne "à l'aide de Microsoft.Les pratiques.L'unité;" est présent dans l'usage de la section.

J'ai essayé de remplacer la version générique avec des non-générique:

CustomerProductManager productsManager = (CustomerProductManager)container.Resolve(typeof(CustomerProductManager));

Et avez-vous une autre erreur:

Pas de surcharge de la méthode 'Résoudre' prend '1' arguments

Il semble que l'une des assemblées n'est pas référencé.. mais lequel? J'ai 2 d'entre eux référencé: 1. Microsoft.Practices.Unity.dll 2. Microsoft.Practices.ServiceLocation.dll

P. P. S. j'ai vu de problème similaire http://unity.codeplex.com/WorkItem/View.aspx?WorkItemId=8205 mais il est résolu que "pas un bug"

Toute pensée sera utile

176voto

rodrigo Points 481

J'ai eu le même problème et j'ai trouvé le «correctif» en regardant les exemples de fichiers de code Prism. Même si ce n'est pas une dll dans Unity V2, vous devez ajouter une référence dans votre classe à: Microsoft.Practices.Unity

ma section "utilisation" complète est la suivante

 using System;
using System.Windows;
using Microsoft.Practices.Composite.Modularity;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Composite.UnityExtensions;
 

Je ne sais pas si vous utilisez Silverlight, mais la version générique de Container.Resolve IS dans Microsoft.Practices.Unity.

45voto

Budda Points 5575

Ajout de l'utilisation supplémentaire:

 using Microsoft.Practices.Unity;
 

résolu un problème.

1voto

Ranjith Points 1

J'ai fait face à ce problème et aucune de ces réponses ne m'a pas aidé. J'obtenais l'erreur de compilation "Méthode inconnue RegisterType () de Microsoft.Practices.Unity.IUnityContainer" pour mon code ci-dessous.

Container.RegisterType<MyInterface, MyClass>();

J'ai constaté que si vous n'implémentiez pas IMyInterface dans la classe 'MyClass', vous rencontriez ce problème. J'espère que ça résoudra pour vous aussi ...

Merci Ranjith

0voto

Budda Points 5575

Je ne pouvais pas le faire sur ma machine, parce que la version de la solution corrigée était réservée à VS2008 SP1 (je n’avais pas encore installé de SP).

J'ai changé de machine, avec un tout nouveau logiciel installé, avec VS2008 + SP1 et maintenant tout va bien.

Idées: 1. essayez d'installer le SP1 2. essayez de réinstaller Unity (j'ai juste essayé de mettre à jour les références, cela n'a pas aidé). 3. essayez de tout réinstaller (idée folle, mais ... :))

0voto

Peter Howe Points 86

Dans ma situation, la classe que j'étais en train d'envelopper avec Unity hérité d'une classe de base abstraite et cette classe de base N'A PAS un constructeur sans paramètre. Une fois que j'ai changé mon code pour utiliser un constructeur sans paramètre pour la classe de base, le problème a disparu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X