IUnityContainer.Resolve <T>выдает ошибку, утверждая, что ее нельзя использовать с параметрами типа - PullRequest
73 голосов
/ 20 мая 2010

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

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

Это было скомпилировано и работает.

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

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

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

P.S.

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

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

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

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

Нет перегрузки для метода 'Resolve' '1' аргументы

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

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

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

Ответы [ 5 ]

173 голосов
/ 28 июля 2010

У меня была та же проблема, и я нашел "исправление" при просмотре файлов примеров кода 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.

29 голосов
/ 29 марта 2018

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

using Unity;

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

container.Resolve<T>();
1 голос
/ 10 декабря 2013

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

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

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

Container.RegisterType<MyInterface, MyClass>();

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

0 голосов
/ 31 мая 2016

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

0 голосов
/ 10 октября 2013

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

...