IUnityContainer.Resolve <T>引发错误,声称它不能与类型参数一起使用


75

昨天我实现了代码:

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

它是可编译的并且可以正常工作。

今天(可能我已经修改了一些东西),我不断收到错误:

非泛型方法'Microsoft.Practices.Unity.IUnityContainer.Resolve(System.Type,string,params Microsoft.Practices.Unity.ResolverOverride [])'不能与类型参数一起使用

我的同事具有相同的源代码,并且没有相同的错误。为什么?如何解决问题?

聚苯乙烯

行“使用Microsoft.Practices.Unity;” 在使用部分中。

我试图用非通用版本替换通用版本:

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

并得到另一个错误:

方法'Resolve'的重载没有接受'1'参数

似乎未引用其中一个程序集。但是,哪个程序集呢?我引用了其中两个:1. Microsoft.Practices.Unity.dll 2. Microsoft.Practices.ServiceLocation.dll

PPS我也遇到过类似的问题http://unity.codeplex.com/WorkItem/View.aspx?WorkItemId=8205,但已解决为“不是bug”

任何想法都会有所帮助


您正在使用Unity 2.0吗?
瓦迪姆(Vadim)2010年

3
您可能会发现,正是Power Commands插件删除了using子句中未使用的名称空间。当您的代码处于不可编译状态时,命名空间为“未使用”,并且您可能习惯于在编辑过程中保存文件-并且该附件会在保存时删除多余的用途。
Curt Nichols 2010年

Answers:


174

我遇到了同样的问题,并在查看Prism示例代码文件时找到了“修复程序”。看起来,即使它不是Unity V2中的dll,您也必须在您的类中添加以下引用: Microsoft.Practices.Unity

我完整的“使用”部分如下

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

我不确定您是否在使用Silverlight,但不是Microsoft.Practices.Unity中Container.Resolve IS的通用版本 。


9
究竟。前一段时间,我检测到添加了“ using Microsoft.Practices.Unity;”。解决了一个问题。
布达

1
这对我也起作用,但是该死的锐利者现在抱怨未使用的“使用指令”。
IbrarMumtaz 2012年

6
原因是带有类型参数的Resolve是Microsoft.Practices.Unity中的扩展方法,而没有类型参数的Resolve()只是接口(或类)上的方法。
Geoff 2015年

1
谢谢!这些年来,这只是在全新的代码上发生的。HttpClient与这些“隐藏的”扩展秘密相同。不是粉丝。我喜欢简单注射器。
TheDev6 '16

12
还有FWIW,在新的且据说高度兼容的Unity 5中,名称空间现在Unity不是Microsoft.Practices.Unity
肯·史密斯

43

Microsoft不再拥有Unity,而在版本5中,名称空间现在为:

using Unity;

使用时,请确保在您的“使用”部分中:

container.Resolve<T>();

1
请注意,如果您使用的是Prism,则Prism的当前稳定版本(6.3.0)仍将使用Unity 4.0.1,您仍然必须在其中使用using Microsoft.Practices.Unity;
Ray

说真的,这让我发疯了。谢谢!
str8ball

1

我遇到了这个问题,这些答案都没有帮助我。我收到编译时间错误

Microsoft.Practices.Unity.IUnityContainer的未知方法RegisterType()

对于我下面的代码。

Container.RegisterType<IMyInterface, MyClass>();

我发现,如果您没有实现IMyInterface该类MyClass,则会遇到此问题。希望它也能为您解决...


0

在我的情况I类包装是使用Unity从一个抽象基类继承,而基类没有不是有参数的构造函数。一旦我将代码更改为对基类使用无参数构造函数,问题就消失了。


0

在我的情况下,我让Bootstrapper在没有通用版本的情况下实现了自己的Resolve,因此找不到Microsoft的Unity Resolve。添加适当的用法就可以了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.