来自推断命名空间的类可以工作,但在显式命名时则不行

时间:2016-06-04 13:46:22

标签: c# generics interface

我想要使用的课程是System.Web.Mvc.DependencyResolver。以下作品:

using System.Web.Mvc;
...
var x = DependencyResolver.Current.GetService<myType>();

但是,以下情况并非如此:

//using System.Web.Mvc;
var x = System.Web.Mvc.DependencyResolver.Current.GetService<myType>();

错误是:

  

非通用方法&#39; IDependencyResolver.GetService(Type)&#39;不能与类型参数一起使用。

没有using System.Web.Mvc指令时使用的语法是什么。

我希望using System.Web.Http。有两个属性(RouteRoutePrefix)存在于这两个名称空间中。 System.Web.Http在此特定代码文件中的使用率要高得多。

1 个答案:

答案 0 :(得分:4)

泛型方法版本GetService<T>()是一个extensioin方法,在DependencyResolverExtensions命名空间中的静态类System.Web.Mvc中进行了描述。

这与IDependencyResolver.GetService()的方法不同,后者被声明为DependencyResolver的非泛型实例方法。

由于您没有导入该命名空间,编译器无法找到实现泛型扩展方法GetService<T>(this IDependencyResolver ...)的静态类。

正如Widi评论的那样,要在没有using语句的情况下使用它,您需要像这样调用它:

var x = System.Web.Mvc.DependencyResolverExtensions.GetService<myType>(System.Web.Mvc.D‌​ependencyResolver.Current);