2014-11-10 4 views
1

IFood 인터페이스를 사용하여 IPerson 인터페이스와 HumanFood 및 DogFood 클래스를 사용하는 Human 및 Dog 클래스 구현이있는 경우. 내 주요 기능에서 HumanFood를 DogFood 및 Human to Dog로 전환하는 방법은 무엇입니까?Ninject - 단일 인터페이스를 사용하는 다중 클래스

현재이 방법을 쓰면 "둘 이상의 일치하는 바인딩을 사용할 수 있습니다."오류가 발생합니다.

감사합니다.

this.Bind<IFood>().To<HumanFood>().Named("HumanFood"); 

또는 바인딩을 결정하기가 WhenInjectedInto에 따라 사용할 :

this.Bind<IFood>().To<HumanFood>().WhenInjectedInto<Human>(); 
this.Bind<IFood>().To<DogFood>().WhenInjectedInto<Dog>(); 

그러나이 모두 표현이 작업을 수행하는

public class Bindings : NinjectModule 
{ 
    public override void Load() 
    { 
     this.Bind<IFood>().To<HumanFood>(); 
     this.Bind<IFood>().To<DogFood>(); 
     this.Bind<IPerson>().To<Human>(); 
     this.Bind<IPerson>().To<Dog>(); 
    } 
} 

static void Main(string[] args) 
{ 
    IKernel kernel = new StandardKernel(); 
    kernel.Load(Assembly.GetExecutingAssembly()); 

    IFood food = kernel.Get<IFood>(); 
    IPerson person = kernel.Get<IPerson>(); 
    person.BuyFood(); 

    Console.ReadLine(); 
} 

답변

3

일반적인 방법 중 하나를 사용 바인딩이라는 것입니다 코드 냄새. 대상에 따라 다양한 구현을 주입하는 이유를 다시 생각해보고 대신 팩토리 패턴의 구현을 주입 할 수 있습니다.

당신이 할 수있는 것들 중 일부의 편리한 개요는 여기에서 찾을 수 있습니다 :

http://lukewickstead.wordpress.com/2013/02/09/howto-ninject-part-2-advanced-features/

관련 문제