Ninject (v2.2.1.4)의 최신 버전을 설치하기 위해 NuGet을 사용했습니다.소스가 없습니다. 디버깅 코드를 실행할 때 Ninject와 함께 오류가 발생했습니다.
나는 다음내 자신의 NinjectDependencyResolver (Adam Freeman & Steve Sanderson에 신용) 만든 :
public class NinjectDependencyResolver : IDependencyResolver
{
private IKernel kernel;
public NinjectDependencyResolver()
{
kernel = new StandardKernel();
AddBindings();
}
public object GetService(Type serviceType)
{
return kernel.TryGet(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType) {
return kernel.GetAll(serviceType);
}
public IBindingToSyntax<T> Bind<T>()
{
return kernel.Bind<T>();
}
public IKernel Kernel
{
get { return kernel; }
}
private void AddBindings()
{
kernel.Bind<ITitleRepository>().To<TitleRepository>();
kernel.Bind<IDayRepository>().To<DayRepository>();
kernel.Bind<IMonthRepository>().To<MonthRepository>();
}
}
을 그리고 다음의 Global.asax의 applcation 시작에서 종속성 해결 프로그램 등록 :
protected void Application_Start()
{
//...other code
DependencyResolver.SetResolver(new NinjectDependencyResolver());
}
이
내가 다음이를 내 코드의 내용 :
ITitleRepository titleRepository = (ITitleRepository)DependencyResolver.Current.GetService(typeof(ITitleRepository));
디버그 모드를 통해 코드가 이는 kernel.TryGet (ServiceType 자리)를 실행 한 후 때이 코드로 (라인별로) 단계 경우, 그러나, 제대로 작동하려면 나타납니다 다음과 같은 오류가 발생합니다
없음 소스 사용 가능
이미지가 표시 되길 바랍니다.
는 사람이 발생하는되는 이유 어떤 생각을 가지고 있습니까?
왜 기본 종속성 해결 프로그램을 바꾸시겠습니까? 당신의 추론은 무엇입니까? 당신은 Ninject.MVC3가하지는 않지만 유지 보수가 덜한 방법으로 아무것도하지 않는 것처럼 보입니다. Ninject를 통해 Ninject.MVC3를 설치하고 NinjectMVC3.cs 파일을 구성하는 것만으로 Nigject를 통해 Ninject를 쉽게 업데이트 할 수 있으며 global.asax를 조작하거나 사용자 정의 종속성 해결 프로그램을 유지 관리 할 필요가 없습니다. –
@MystereMan .SetResolver() 메서드를 호출하여 수집 한 내용에서 기본 종속성 해결 프로그램을 바꾸는 대신 ninject를 사용하여 내 자신의 종속성 해결 프로그램을 추가하고 있습니다. 구현 한 GetService() 메서드가 종속성을 해결할 수없는 경우 null을 반환하고 기본 구현으로 돌아갑니다. – Dangerous
@MystereMan 그리고 Ninject에서 Ninject를 사용하고 Ninject.MVC3을 사용하지 않는 이유는 간단합니다 - Pro ASP.NET MVC3 Framework에서 ninject를 추가하는 방법을 따랐으며 Ninject.MVC3 패키지에 대한 언급이 없었습니다. 그것이 존재했다는 것을 깨닫지 못한다.나는 원래의 구현을 제거하고 제안을 위해이 새로운 것으로 전환했다. 그러나 여전히이 오류가 발생하여 내 질문은 여전히 의미합니다. – Dangerous