I 세 프로젝트Ninject Bindings : 동일한 인터페이스가 다른 유형에 바인드되었습니다. 왜 효과가 있니?
- Application.Infrastructure
- Application.A있다 (
Application.Infrastructure
갖는 행 참조) - Application.B
- Application.Web (전체에서 참조가 (
Application.Infrastructure
에서 참조 갖는다))
Application.Infrastructure
에는 일반 저장소 클래스
Application.A
에서
public interface IRepository<T>
{
T FirstOrDefault(Expression<Func<T, bool>> where);
}
제가
Application.Web에서public class ApplicationBRepository<T> : IRepository<T>
{
private readonly IApplicationBDBContext _context;
public ApplicationBRepository(IApplicationBDBContext context)
{
_context = context;
}
// implementation
}
내가 Ninject에
을 이용하여 인터페이스를 결합 제가 저장소 인터페이스의 다른 구현을Application.B
이것은 리포지토리
public class ApplicationARepository<T> : IRepository<T>
{
private readonly IApplicationADBContext _context;
public ApplicationARepository(IApplicationADBContext context)
{
_context = context;
}
// implementation
}
의 구현을
// Bind implementations from Application.A
kernel.Bind<IApplicationADBContext>().To<ApplicationADBContext>().InRequestScope();
kernel.Bind(typeof(IRepository<>)).To(typeof(ApplicationARepository<>));
// Bind implementations from Application.B
kernel.Bind<IApplicationBDBContext>().To<ApplicationBDBContext>().InRequestScope();
// Here should fail. I already binded typeof(IRepository<>) to typeof(ApplicationARepository<>)
kernel.Bind(typeof(IRepository<>)).To(typeof(ApplicationBRepository<>));
.Where() 절을 지정하지 않고 동일한 인터페이스를 두 개의 다른 유형에 바인드하더라도 작동하고 오류가 발생하지 않습니다.
왜? Ninject가 어떻게 그들을 차별화하는지 알고 있습니까?
을 코드의 어떤 라인 당신이 실패 할 것으로 예상합니까? 두 번째 바인딩 또는 라인 어디 인터페이스를 해결하려고합니까? –
인터페이스가 다릅니다 .. 'BDB'와'ADB' ... –
다른 인터페이스와 동일한 인터페이스를 바인딩 할 때 두 번째 바인딩 – Catalin