昨天我已经实现了代码:
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,但它被解决为“不是错误”
任何想法都会有所帮助
答案 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。添加正确的用法就可以了。