IUnityContainer.Resolve<T> throws error claiming it cannot be used with type parameters
Solution 1
I had the same problem and found the "fix" looking at Prism sample code files. Looks like, even if it is not a dll in Unity V2 you have to add a reference in your class to: Microsoft.Practices.Unity
my complete "using" section is as follow
using System;
using System.Windows;
using Microsoft.Practices.Composite.Modularity;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Composite.UnityExtensions;
I'm not sure if you are using Silverlight, but the generic version for Container.Resolve IS in Microsoft.Practices.Unity.
Solution 2
Microsoft no longer owns Unity and it's in version 5, the namespace is now:
using Unity;
Ensure that is in your using section when using:
container.Resolve<T>();
Solution 3
I faced this problem and none of this answers did not help me. I was getting the compile time error
Unknown method RegisterType() of Microsoft.Practices.Unity.IUnityContainer
for my below code.
Container.RegisterType<IMyInterface, MyClass>();
I found that if you did not implement IMyInterface
to the class MyClass
, you get this issue.
Hope it resolves for you too...
Related videos on Youtube
Budda
I am a software developer, here is my hobby: Virtual Football Manager Elita
Updated on May 21, 2020Comments
-
Budda almost 4 years
Yesterday I've implemented the code:
CustomerProductManager productsManager = container.Resolve<CustomerProductManager>();
It was compilable and working.
Today (probably I've modified something) I am constantly getting the error:
The non-generic method 'Microsoft.Practices.Unity.IUnityContainer.Resolve(System.Type, string, params Microsoft.Practices.Unity.ResolverOverride[])' cannot be used with type arguments
My collegue has the same source code and doesn't have same error. Why? How to resolve the problem?
P.S.
line "using Microsoft.Practices.Unity;" is present in usings section.
I've tried to replace generic version with non-generic one:
CustomerProductManager productsManager = (CustomerProductManager)container.Resolve(typeof(CustomerProductManager));
And got another error:
No overload for method 'Resolve' takes '1' arguments
It seems like one of the assemblies is not referenced.. but which one? I have 2 of them referenced: 1. Microsoft.Practices.Unity.dll 2. Microsoft.Practices.ServiceLocation.dll
P.P.S. I've saw similar problem http://unity.codeplex.com/WorkItem/View.aspx?WorkItemId=8205 but it is resolved as "not a bug"
Any thought will be helpful
-
Vadim almost 14 yearsAre you using Unity 2.0?
-
Curt Nichols almost 14 yearsYou'll probably find that it's the Power Commands add-on that's removing unused namespace using clauses; the namespace is "unused" when your code is in an uncompilable state and you probably have a habit of saving the file during editing--and the add-on removes the extra uses when saving.
-
-
Budda almost 14 yearsExactly. Some time ago I've detected that adding 'using Microsoft.Practices.Unity;' resolves an issue.
-
IbrarMumtaz almost 12 yearsThis worked me also, but damn resharper is now moaning about unused 'using directives.'
-
Geoff about 9 yearsThe reason is that Resolve with a type parameter is an extension method found in Microsoft.Practices.Unity, while the Resolve() without a type parameter is just a method on the interface (or class).
-
TheDev6 almost 8 yearsThx! All these years later and this just happened on brand new code. HttpClient is the same way with these 'hidden' extension secrets. Not a fan. I like Simple Injector.
-
GregP almost 8 yearsWorked for me. Weird thing was I could go to the definition fine but the using statement wasn't there.
-
Ken Smith over 6 yearsAnd FWIW, in the new and supposedly highly compatible Unity 5, the namespace is now
Unity
and notMicrosoft.Practices.Unity
. -
Darthchai about 6 yearsThx Ken, you saved me a ton of time trying to track this down. Upgraded my Unity nuget package and this no longer worked until just changing to using Unity like you mentioned
-
Syroot almost 6 yearsNote that in case you're using Prism, the current stable version (6.3.0) of Prism still uses Unity 4.0.1, where you still have to
using Microsoft.Practices.Unity;
-
Buminda over 4 yearsThanks, I was totally confused with - Resolve(Type type, string name, params ResolverOverride[] overrides)
-
str8ball over 3 yearsSeriously, this one was driving me nuts. Thanks!