IUnityContainer.Resolve <t>抛出错误声称它不能与类型参数一起使用</t>

时间:2010-05-20 15:46:21

标签: c# .net generics unity-container compilation

昨天我已经实现了代码:

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

这是可编辑和工作的。

今天(可能是我修改了一些东西)我经常收到错误:

  

非通用方法   “Microsoft.Practices.Unity.IUnityContainer.Resolve(System.Type的,   字符串,参数   Microsoft.Practices.Unity.ResolverOverride [])”   不能与类型参数一起使用

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

P.S。

line“using the Microsoft.Practices.Unity;”存在于使用部分。

我尝试用非通用版本替换泛型版本:

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

还有另一个错误:

  

方法'Resolve'没有重载   '1'参数

似乎其中一个程序集未被引用..但是哪一个?我有两个参考: 1. Microsoft.Practices.Unity.dll 2. Microsoft.Practices.ServiceLocation.dll

P.P.S。我已经看到了类似的问题http://unity.codeplex.com/WorkItem/View.aspx?WorkItemId=8205,但它被解决为“不是错误”

任何想法都会有所帮助

5 个答案:

答案 0 :(得分:172)

我有同样的问题,发现“修复”看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 的通用版本。

答案 1 :(得分:26)

Microsoft不再拥有Unity,而且它在版本5中,命名空间现在是:

using Unity;

使用时确保在您的使用部分:

container.Resolve<T>();

答案 2 :(得分:1)

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

  

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

我的下面的代码。

Container.RegisterType<MyInterface, MyClass>();

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

答案 3 :(得分:0)

在我的情况下,我使用Unity包装的类继承自抽象基类,并且该基类确实 NOT 具有无参数构造函数。一旦我改变了我的代码,为基类使用无参数构造函数,问题就消失了。

答案 4 :(得分:0)

在我的情况下,我让Bootstrapper在没有通用版本的情况下实现了自己的Resolve,因此无法找到微软的Unity Resolve。添加正确的用法就可以了。