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. Добавление правильного использования сделало трюк.