IUnityContainer.Resolve <T> выдает ошибку, утверждающую, что ее нельзя использовать с параметрами типа

Вчера я внедрил код:

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

Он был компилируемым и работающим.

Сегодня (возможно, я что-то изменил) я постоянно получаю ошибку:

Не общий метод "Microsoft.Practices.Unity.IUnityContainer.Resolve(System.Type, строка, params Microsoft.Practices.Unity.ResolverOverride [])" не может использоваться с аргументами типа

Мой коллеж имеет тот же исходный код и не имеет такой же ошибки. Зачем? Как решить проблему?

P.S.

строка "с использованием Microsoft.Practices.Unity;" присутствует в разделе "Использование".

Я попытался заменить родовую версию на не общий:

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

И получила еще одну ошибку:

Нет перегрузки для метода "Разрешить" Аргументы '1'

Кажется, что одна из сборников не указана.. но какой? У меня есть 2 из них: 1. Microsoft.Practices.Unity.dll 2. Microsoft.Practices.ServiceLocation.dll

P.P.S. Я видел подобную проблему http://unity.codeplex.com/WorkItem/View.aspx?WorkItemId=8205, но она разрешена как "не ошибка"

Любая мысль будет полезна

Ответ 1

У меня была такая же проблема, и я нашел "исправление", глядя на файлы кода примера Prism. Похоже, даже если это не dll в Unity V2, вам нужно добавить ссылку в свой класс: Microsoft.Practices.Unity

мой полный раздел "Использование" выглядит следующим образом

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

Я не уверен, что вы используете Silverlight, но общую версию для Container.Resolve IS в Microsoft.Practices.Unity.

Ответ 2

Microsoft больше не владеет Unity, а в версии 5 - пространство имен:

using Unity;

Убедитесь, что в вашем разделе использования используется:

container.Resolve<T>();

Ответ 3

Я столкнулся с этой проблемой, и ни один из этих ответов мне не помог. Я получал ошибку времени компиляции

Неизвестный метод RegisterType() Microsoft.Practices.Unity.IUnityContainer

для моего кода ниже.

Container.RegisterType<MyInterface, MyClass>();

Я обнаружил, что если вы не реализовали IMyInterface в классе MyClass, вы получите эту проблему. Надеюсь, он тоже решает вас...

Ответ 4

В моей ситуации класс я обертывал Unity, унаследованный от абстрактного базового класса, и этот базовый класс имел НЕ конструктор без параметров. Как только я изменил свой код на использование конструктора без параметров для базового класса, проблема исчезла.

Ответ 5

В моей ситуации у меня был Bootstrapper, который реализовал собственный Resolve без общей версии, поэтому он не смог найти решение Microsoft Unity Resolve. Добавление правильного использования сделало трюк.