2012-04-17 6 views
1

테스트 프로젝트에 Ninject (v4.0.30319) 패키지를 설치했습니다. 아래 테스트 코드를 작성하십시오. 불행히도 ValidateAbuse.Instance.Repository는 항상 Null입니다. 왜 Ninject가 저장소를 ValidateAbuse.Repository 속성에 바인딩하지 않습니까? 일부 사용자는 생성자 바인딩을 사용하도록 제안 할 수 있지만 코드 구조로 인해 사용할 수 없습니다. 아래 코드는 단지 예일 뿐이므로 속성에 바인딩하는 방법을 찾아야합니다. 항상Ninject 속성 바인딩, 올바르게하는 방법

[TestMethod] 
     public void PropertyInjection() 
     { 
      using (IKernel kernel = new StandardKernel()) 
      { 
       kernel.Bind<ISettingsRepository>().To<SettingsRepository>(); 
       Assert.IsNotNull(ValidateAbuse.Instance.Repository); 
      } 
     } 

저장소 인터페이스

public interface ISettingsRepository 
{ 
    List<string> GetIpAbuseList(); 
    List<string> GetSourceAbuseList(); 
} 

저장소 구현

public class SettingsRepository : ISettingsRepository 
    { 
     public List<string> GetIpAbuseList() 
     { 
      return DataAccess.Instance.Abuses.Where(p => p.TypeId == 1).Select(p => p.Source).ToList(); 
     } 

     public List<string> GetSourceAbuseList() 
     { 
      return DataAccess.Instance.Abuses.Where(p => p.TypeId == 2).Select(p => p.Source).ToList(); 
     } 
    } 

클래스 실패

시험 방법은 내가 저장소를

012을 결합하려고 할

답변

2

Ninject는 개체의 인스턴스를 만들 때 개체의 속성 만 바인딩합니다. Ninject를 생성하는 대신 ValidateAbuse의 인스턴스를 생성하기 때문에, 그것에 대해 아무 것도 모르기 때문에 생성시 속성 값을 설정할 수 없습니다.

편집 :

당신은 ValidateAbuse에서 정적 싱글을 제거하고 Ninject에이 싱글로 관리 할 수 ​​있도록한다. 당신이 ValidateAbuse의 인스턴스를 필요가있는 클래스를 생성해서 Ninject를 요청할 때

kernel.Bind<ValidateAbuse>().ToSelf().InSingletonScope(); 

그런 다음, 항상 같은 인스턴스를 얻을 것이다.

Ninject가 작동하는 방식이나 구현 방법을 완전히 이해하지 못했기 때문에 위키 을 읽고 기존 응용 프로그램에 연결하기 전에 몇 가지 기본 예제를 따르는 것이 좋습니다.

+0

그러면 ValidateAbuse 클래스를 만들고 주입 된 저장소를 사용하는 방법은 무엇입니까? – Tomas

+0

나는 이것을 이미 읽었으며 현재 상황에서는 도움이되지 않습니다. 방금 클래스 인스턴스 하나를 만들고 바인딩하는 방법을 썼습니다. 그러나 인스턴스를 얻는 방법? 나는 추상적 인 클래스 인 ConverterBase를 가지고 있는데, 그 클래스의 싱글 톤 ValidateAbuse 인스턴스에 접근 할 필요가있다. ConverterBase Contructor를 사용하여 ValidateAbuse 클래스를 삽입 할 수 없습니다. Inject 속성으로 속성을 추가하면 Ninject는 아무 것도하지 않습니다. – Tomas

+2

내가 말했듯이, 당신이 Ninject를 통해 인스턴스를 해결하지 않기 때문입니다. Ninject를 사용하여 종속성을 해결해야하는 인스턴스를 작성해야합니다. 이 페이지도 읽어보십시오. https://github.com/ninject/ninject/wiki/The-Activation-Process –