Ninject.MVC3 확장을 사용하여 MVC 응용 프로그램에서 DI를 설정하는 ASP.NET MVC 3 응용 프로그램이 있습니다. 즉, 내 바인딩이 정의 된 폴더에 NinjectMVC3.cs
파일이 있습니다. 이것은 DI가 내 응용 프로그램의 컨트롤러로 잘 작동합니다.ASP.NET MVC 3 응용 프로그램의 클래스 라이브러리에서 Ninject 참조
ASP.NET MVC 웹 응용 프로그램 외에도 내 솔루션에는 클래스 라이브러리 프로젝트가 포함되어 있습니다. 내 도메인 모델, 서비스 등을 포함하는 MyProject.Core
이라고합시다. 거기에서 나는, EmailServices
라는 서비스를 사용하므로 같은 UserServices
라는 클래스가 : 당신이 볼 수 있듯이, UserServices
클래스 EmailServices
에 하드 코딩 된 종속성이
public class UserServices : IUserServices
{
private readonly IEmailServices _emailServices = new EmailServices();
public void CreateUser(...)
{
// Create user...
_emailServices.SendWelcomeEmail(newUser);
}
}
을,하지만 난에 그것을 위해 싶습니다 DI를 사용하도록 구성 할 수도 있습니다. 즉, 내 ASP.NET MVC 응용 프로그램 (또는 단위 테스트 프로젝트 또는 어느 곳에서든지) "IEmailServices
을 사용하여 바인딩 TestEmailServices
"이라고 말하고 UserServices
클래스에 TestEmailServices
대신 EmailServices
을 사용하고 싶습니다.
어떻게해야합니까? 내가 좋아하는 뭔가를 할 수 있도록하고 싶습니다 :
public class UserServices : IUserServices
{
private readonly IEmailServices _emailServices = kernel.Get<EmailServices>();
...
}
하지만 kernel
이 경우에서 와서 어디로 가는지 모르겠어요. 내가 무슨 말을하는거야, 아니면 내가 틀린 나무를 여기에서 짖고 있니?
감사
예, 대답입니다. Ninject 커널을 서비스 위치 지정자로 사용하지 마십시오. 라이브러리 구현을 Ninject에 연결하지 마십시오. 메인 애플리케이션에서 전체 객체 트리를 구성하게하십시오. – Aaronaught
아, 그냥 그걸 시도 했어야 했어! <이마를 때린다 /> :-) 감사합니다. –