it-swarm-eu.dev

IUnityContainer.Resolve <T> zgłasza błąd, twierdząc, że nie można go użyć z parametrami typu

Wczoraj zaimplementowałem kod:

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

Było możliwe do skompilowania i pracy.

Dzisiaj (prawdopodobnie zmodyfikowałem coś) ciągle otrzymuję błąd:

Nie generyczna metoda 'Microsoft.Practices.Unity.IUnityContainer.Resolve (System.Type, String, params Microsoft.Practices.Unity.ResolverOverride [])' nie można użyć z argumentami typu

Mój kolega ma ten sam kod źródłowy i nie ma tego samego błędu. Czemu? Jak rozwiązać problem?

P.S. 

wiersz „używając Microsoft.Practices.Unity;” jest obecny w części poświęconej używaniu.

Próbowałem zastąpić wersję ogólną wersją ogólną:

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

I dostałem kolejny błąd:

Brak przeciążenia dla metody „Resolve” trwa Argumenty „1”

Wygląda na to, że jeden z zespołów nie ma odniesienia .. ale który? Mam 2 z nich przywoływane: 1. Microsoft.Practices.Unity.dll 2. Microsoft.Practices.ServiceLocation.dll

P.P.S. Widziałem podobny problem http://unity.codeplex.com/WorkItem/View.aspx?WorkItemId=8205 ale został rozwiązany jako „nie błąd”

Każda myśl będzie pomocna

71
Budda

Miałem ten sam problem i znalazłem „poprawkę”, patrząc na przykładowe pliki kodu Prism. Wygląda na to, że nawet jeśli nie jest to dll w Unity V2, musisz dodać w swojej klasie odniesienie do: Microsoft.Practices.Unity

moja pełna sekcja „Używanie” jest następująca

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

Nie jestem pewien, czy używasz Silverlight, ale wersja ogólna dla Container.ResolveJESTw Microsoft.Practices.Unity.

172
rodrigo

Microsoft nie jest już właścicielem Unity i jest w wersji 5, przestrzeń nazw jest teraz: 

using Unity;

Upewnij się, że znajdujesz się w sekcji używanej podczas korzystania z:

container.Resolve<T>();
23
RandomUs1r

Napotkałem ten problem i żadna z tych odpowiedzi mi nie pomogła. Wystąpił błąd czasu kompilacji

Nieznana metoda RegisterType () of Microsoft.Practices.Unity.IUnityContainer

dla mojego poniższego kodu.

Container.RegisterType<MyInterface, MyClass>();

Odkryłem, że jeśli nie zaimplementowałeś IMyInterface do klasy MyClass, otrzymasz ten problem. Mam nadzieję, że rozwiązuje to również dla ciebie ...

1
Ranjith

W mojej sytuacji Bootstrapper wdrożył własną wersję bez wersji generycznej, więc nie mógł znaleźć Unity Resolve Microsoftu. Dodanie właściwego użycia przyniosło efekt.

0
PmanAce

W mojej sytuacji klasa, którą owijałem Unity odziedziczona po abstrakcyjnej klasie bazowej, a klasa bazowa zrobiłaNIEma konstruktor bez parametrów. Gdy zmieniłem kod, aby użyć bezparametrowego konstruktora dla klasy bazowej, problem zniknął.

0
Peter Howe