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 오브젝트가 작성되지 않음) 코드 아래에 대한 널 (null)을 얻을

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

대신

IService 

IService<T> 

를 전달하는 몇 가지 다른 방법을 제안하십시오 DependencyResolver.Current.GetService()

+0

현재 '리졸버'는 무엇입니까? 실제로 인터페이스의 구현을 어떻게 등록합니까? – 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가이 오류를보고하고 컴파일을 허용하지 않는다는 것을 의미합니까? 또는 런타임 오류입니까? –