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報告這個錯誤,因此不允許你編譯。或者是運行時錯誤? –