3

我想在控制器中使用dependencyinjection并使用 System.Web.MvcDependencyResolver.Current.GetService()在控制器类中创建服务实例。System.web.Mvc DependencyResolver无法为泛型类创建对象

当服务接口是不通用的,如下

public interface IProfileManagementService 
{ 
    IList<News> GetSavedSearchList(int userObjectId, ApplicationType applicationType,int? vendorUserObjectId); 
} 

和我下面的依赖解析器语法能正常工作,给了我实例ProfileManagementService

DependencyResolver.Current.GetService<IProfileManagementService>(); 

的,但如果我创造的任何通用服务接口如下,

public interface ICommonProfileManagementService<T> 
{ 
    IList<T> GetSavedSearchList(int userObjectId, ApplicationType applicationType,int? vendorUserObjectId); 
} 

但我得到一个空(不创建CommonProfileManagementService对象)下面的代码

DependencyResolver.Current.GetService<ICommonProfileManagementService<News>>(); 

请推荐路过

IService<T> 

代替

IService 

到的一些替代方法DependencyResolver.Current.GetService()

+0

什么是您目前的'Resolver'?你如何实际注册接口的实现? – haim770

回答

2

以下是包含从DependencyResolver返回泛型所需的语法的完整代码。

using Microsoft.Practices.Unity; 
using System; 
using System.Collections.Generic; 
using System.Web.Mvc; 
using Microsoft.Practices.Unity.Mvc; 

namespace ConsoleApplication2 
{ 
    class Program 
    { 
     public interface IService<T> 
     { 
      List<T> GetService(); 
     } 

     public class Service<T> : IService<T> 
     { 
      public List<T> GetService() 
      { 
       return new List<T>(); 
      } 
     } 

     static void Main(string[] args) 
     { 
      var container = new UnityContainer(); 

      container.RegisterType(typeof(IService<>), typeof(Service<>)); 

      DependencyResolver.SetResolver(new UnityDependencyResolver(container)); 

      var service = DependencyResolver.Current.GetService(typeof(IService<string>)); 

      Console.WriteLine(service.ToString()); 

      Console.ReadKey(); 
     } 
    } 
} 
+0

我试过了,它说接口名称此时无效 – aditi

+0

你在哪里配置你的DI容器? –

+1

另外,当你说'它说'你的意思是Visual Studio报告这个错误,因此不允许你编译。或者是运行时错误? –