web-dev-qa-db-fra.com

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

Hier j'ai implémenté le code:

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

C'était compilable et fonctionnel.

Aujourd'hui (j'ai probablement modifié quelque chose), je reçois constamment l'erreur:

La méthode non générique 'Microsoft.Practices.Unity.IUnityContainer.Resolve (System.Type, Chaîne, paramètres Microsoft.Practices.Unity.ResolverOverride [])' ne peut pas être utilisé avec des arguments de type

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

P.S. 

ligne "using Microsoft.Practices.Unity;" est présent dans la section usings.

J'ai essayé de remplacer la version générique par une non générique:

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

Et a une autre erreur:

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

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

P.P.S. J'ai rencontré un problème similaire http://unity.codeplex.com/WorkItem/View.aspx?WorkItemId=8205 mais il est résolu comme "pas un bogue"

Toute pensée sera utile

71
Budda

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.ResolveESTdans Microsoft.Practices.Unity.

172
rodrigo

Microsoft ne possède plus Unity et il est dans la version 5, l'espace de noms est maintenant: 

using Unity;

Assurez-vous que cela se trouve dans votre section using lorsque vous utilisez:

container.Resolve<T>();
23
RandomUs1r

J'ai fait face à ce problème et aucune de ces réponses ne m'a pas aidé. Je recevais l'erreur de temps 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'aviez pas implémenté IMyInterface dans la classe MyClass, vous rencontriez ce problème. J'espère que ça résoudra pour vous aussi ...

1
Ranjith

Dans mon cas, Bootstrapper avait mis en œuvre sa propre résolution sans la version générique, de sorte qu'il ne pouvait pas trouver la résolution unitaire de Microsoft. L'ajout des utilisations appropriées a fait l'affaire.

0
PmanAce

Dans ma situation, la classe que je recouvrais avec Unity hérité d'une classe de base abstraite et cette classe de base n'avaitPASun 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.

0
Peter Howe