Gestern habe ich den Code implementiert:
CustomerProductManager productsManager = container.Resolve<CustomerProductManager>();
Es war kompilierbar und funktionierte.
Heute (wahrscheinlich habe ich etwas geändert) erhalte ich ständig den Fehler:
Die nicht generische Methode 'Microsoft.Practices.Unity.IUnityContainer.Resolve (System.Type, Zeichenfolge, Parameter Microsoft.Practices.Unity.ResolverOverride [])' kann nicht mit Typargumenten verwendet werden
Mein Kollege hat den gleichen Quellcode und nicht den gleichen Fehler. Warum? Wie kann das Problem behoben werden?
PS
Zeile "using Microsoft.Practices.Unity;" ist im Usings-Bereich vorhanden.
Ich habe versucht, die generische Version durch eine nicht generische zu ersetzen:
CustomerProductManager productsManager = (CustomerProductManager)container.Resolve(typeof(CustomerProductManager));
Und habe noch einen Fehler:
Keine Überladung für die Methode 'Auflösen' erfordert '1'-Argumente
Es scheint, als würde auf eine der Baugruppen nicht verwiesen. Aber auf welche? Ich habe 2 von ihnen referenziert: 1. Microsoft.Practices.Unity.dll 2. Microsoft.Practices.ServiceLocation.dll
PPS Ich habe ein ähnliches Problem gesehen: http://unity.codeplex.com/WorkItem/View.aspx?WorkItemId=8205, aber es wurde als "kein Fehler" behoben.
Jeder Gedanke wird hilfreich sein
Antworten:
Ich hatte das gleiche Problem und fand das "Update" beim Betrachten von Prism-Beispielcodedateien. Selbst wenn es sich in Unity V2 nicht um eine DLL handelt, müssen Sie Ihrer Klasse einen Verweis hinzufügen auf: Microsoft.Practices.Unity
Mein vollständiger Abschnitt "Verwenden" lautet wie folgt
using System; using System.Windows; using Microsoft.Practices.Composite.Modularity; using Microsoft.Practices.Unity; using Microsoft.Practices.Composite.UnityExtensions;
Ich bin nicht sicher, ob Sie Silverlight verwenden, aber die generische Version für Container.Resolve IS in Microsoft.Practices.Unity.
quelle
Unity
und nichtMicrosoft.Practices.Unity
.Microsoft besitzt Unity nicht mehr und es ist in Version 5, der Namespace ist jetzt:
using Unity;
Stellen Sie sicher, dass sich dies in Ihrem Verwendungsabschnitt befindet, wenn Sie Folgendes verwenden:
quelle
using Microsoft.Practices.Unity;
Ich war mit diesem Problem konfrontiert und keine dieser Antworten hat mir nicht geholfen. Ich habe den Fehler bei der Kompilierung erhalten
für meinen unten stehenden Code.
Container.RegisterType<IMyInterface, MyClass>();
Ich habe festgestellt, dass dieses Problem auftritt, wenn Sie es nicht
IMyInterface
in die Klasse implementiert habenMyClass
. Hoffe, es löst sich auch für Sie auf ...quelle
In meiner Situation hat die Klasse, die ich mit Unity umbrochen habe, von einer abstrakten Basisklasse geerbt, und diese Basisklasse hatte KEINEN parameterlosen Konstruktor. Nachdem ich meinen Code geändert hatte, um einen parameterlosen Konstruktor für die Basisklasse zu verwenden, verschwand das Problem.
quelle
In meiner Situation ließ Bootstrapper sein eigenes Resolve ohne die generische Version implementieren, sodass das Unity Resolve von Microsoft nicht gefunden werden konnte. Das Hinzufügen der richtigen Verwendungen hat den Trick getan.
quelle