2009-03-11 5 views
4

Ninject를 사용하여 여러 모듈을로드하고 있습니다. 두 모듈이 인터페이스에 대해 두 개의 서로 다른 구현을 바인딩하려고 시도하면 서비스에 대한 다중 바인딩이 허용되지 않는다는 오류가 발생합니다. Ninject, 다중 서비스 바인딩

내가 (유니티, 윈저, Spring.net 등) 을 모두 사용하고 다른 모든 IOC의 프레임 워크

는 인터페이스의 여러 구현을 '등록'할 수있는 능력을 가지고있다.

나를 실제 생활 예를 들어 보겠습니다 :

public class HealtMonitorEmailAlertServiceModule : StandardModule 
{ 
    public override void Load() 
    { 
     this.Bind<IAlertService>().To<EmailAlertService>(); 
    } 
} 

public class HealtMonitorSmsAlertServiceModule : StandardModule 
{ 
    public override void Load() 
    { 
     this.Bind<IAlertService>().To<SmsAlertService>(); 
    } 
} 

public class Program 
{ 
    static void Main() 
    { 
     var emailService = new HealtMonitorEmailAlertServiceModule(); 
     var smsService = new HealtMonitorSmsAlertServiceModule(); 

     IKernel kernel = new StandardKernel(emailService, smsService); 
     kernel.Get<IAlertService>() 
    } 
} 

는 위의 예외를 생성, 내가 커널에로드 할 마지막 모듈에 등록 된 유형을 해결하기를 기대한다. 나는 Autofac을 사용하여 똑같은 접근법을 시도했고 예상대로 작동합니다.

답변

4

Ninject 2.0에는이 기능이 있지만 Ninject 1.x에는 없습니다. 2.0은 아직 베타 버전이지만, 1.x는 2 개월 이내에 수명이 다할 것이기 때문에 살펴 보시기 바랍니다.

+1

Nat 응답에 감사드립니다. 곧 Ninject 2.0을 살펴 보겠습니다. 그나 저 좋은 일, 나는 당신의 닌자 기술에 깊은 인상을 받았습니다. –