테스트 프로젝트에 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을 결합하려고 할
그러면 ValidateAbuse 클래스를 만들고 주입 된 저장소를 사용하는 방법은 무엇입니까? – Tomas
나는 이것을 이미 읽었으며 현재 상황에서는 도움이되지 않습니다. 방금 클래스 인스턴스 하나를 만들고 바인딩하는 방법을 썼습니다. 그러나 인스턴스를 얻는 방법? 나는 추상적 인 클래스 인 ConverterBase를 가지고 있는데, 그 클래스의 싱글 톤 ValidateAbuse 인스턴스에 접근 할 필요가있다. ConverterBase Contructor를 사용하여 ValidateAbuse 클래스를 삽입 할 수 없습니다. Inject 속성으로 속성을 추가하면 Ninject는 아무 것도하지 않습니다. – Tomas
내가 말했듯이, 당신이 Ninject를 통해 인스턴스를 해결하지 않기 때문입니다. Ninject를 사용하여 종속성을 해결해야하는 인스턴스를 작성해야합니다. 이 페이지도 읽어보십시오. https://github.com/ninject/ninject/wiki/The-Activation-Process –