it-swarm.com.de

IUnityContainer.Resolve <T> gibt einen Fehler aus, der besagt, dass es nicht mit Typparametern verwendet werden kann

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 hat nicht den gleichen Fehler. Warum? Wie löse ich das Problem?

P.S. 

zeile "using Microsoft.Practices.Unity;" ist im Usings-Bereich präsent.

Ich habe versucht, die generische Version durch eine nicht generische zu ersetzen:

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

Und bekam noch einen Fehler:

Keine Überladung für die Methode 'Resolve' dauert '1' Argumente

Es scheint, als sei 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

P.P.S. Ich habe ein ähnliches Problem gesehen http://unity.codeplex.com/WorkItem/View.aspx?WorkItemId=8205 , aber es wird als "kein Fehler" behoben.

Jeder Gedanke wird hilfreich sein

71
Budda

Ich hatte das gleiche Problem und fand den "Fix" bei Prism-Beispielcode-Dateien. Sieht so aus, auch wenn es in Unity V2 keine DLL ist, müssen Sie Ihrer Klasse einen Verweis hinzufügen auf: Microsoft.Practices.Unity

mein vollständiger "Verwendungsbereich" ist 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.ResolveISTin Microsoft.Practices.Unity.

172
rodrigo

Microsoft besitzt nicht mehr Unity und ist in Version 5, der Namespace lautet nun: 

using Unity;

Stellen Sie sicher, dass in Ihrem Verwendungsbereich enthalten ist, wenn Sie Folgendes verwenden:

container.Resolve<T>();
23
RandomUs1r

Ich war mit diesem Problem konfrontiert und keine dieser Antworten half mir nicht. Beim Kompilieren ist ein Fehler aufgetreten

Unbekannte Methode RegisterType () von Microsoft.Practices.Unity.IUnityContainer

für meinen untenstehenden Code.

Container.RegisterType<MyInterface, MyClass>();

Ich habe festgestellt, dass Sie dieses Problem erhalten, wenn Sie IMyInterface nicht in die Klasse MyClass implementiert haben. Hoffe, es löst sich auch für Sie ...

1
Ranjith

In meiner Situation musste Bootstrapper eine eigene Resolve ohne die generische Version implementieren, sodass die Unity Resolve von Microsoft nicht gefunden wurde. Das Hinzufügen der richtigen Usings hat den Trick geleistet.

0
PmanAce

In meiner Situation erbte die Klasse, die ich mit Unity umhüllte, eine abstrakte Basisklasse, und diese Basisklasse hatteNICHTeinen parameterlosen Konstruktor. Nachdem ich meinen Code geändert hatte, um einen parameterlosen Konstruktor für die Basisklasse zu verwenden, verschwand das Problem.

0
Peter Howe