과거에는 ActionScript 3.0 IoC 컨트롤러 인 swiftsuspenders를 사용했습니다. 기본적으로 switfsuspender의 첫 번째 버전은 인젝터 (injector)라고 불리는 Ninject 커널과 비슷한 것을 가지고있었습니다.더 많은 실제 사례가 필요합니다.
응용 프로그램 인젝터를 만들고 싶다면 (응용 프로그램 전체에서 가장 관련있는 매핑을 사용한다고 가정 해 봅시다) 인젝터 자체를 응용 프로그램 클래스에 주입해야했습니다.
응용 프로그램의 여러 클래스 중에서 kernel.get <>을 사용하는 것이 무엇인지 궁금합니다. 커널 자체를 주입해야합니까?
필자는 개인적으로 kernel.inject를 사용하고 싶지만 kernel.inject를 할 수 있다면 필자는 수동으로 종속성을 주입 할 가능성이 높습니다 (키스).
테스트 사례는 훌륭하지만 실제로 실제적인 문제와는 거리가 멀기 때문에이 점을 명확하게 설명 할 수 있기를 바랍니다. 고맙습니다.
편집 : 일부 사람들이 "루트 컨테이너"에 대해 말한 것으로 나타났습니다. 내가 찾고있는 개념 인 것 같습니다. 루트 컨테이너를 설정하고 다른 응용 프로그램 클래스에서이를 어떻게 알 수 있습니까?
Edit2가 샘플 코드 (그냥 예 위해서입니다, 오류를 용서하십시오) : 난 아직도 일부 초기화 문제로 싸우고 있기 때문에
class SomeClass
{
public SomeClass()
{
Command cmd = new Command();
cmd.execute();
}
}
class SomeOtherClass:ISomeOtherClass
{
public void allright()
{
//right
}
}
class Command
{
ISomeOtherClass dependency;
void execute()
{
dependency.allright();
}
}
Program.Main()
{
IKernel kernel = new StandardKernel();
kernel.Bind<SomeClass>().ToSelf().InSingletonScope();
kernel.Bind<ISomeOtherClass>().To<SomeOtherClass>();
SomeClass sc = kernel.Get<SomeClass>();
}
나는, 아직 테스트하지 못했지만, 내 질문은, 어떻게 명령 클래스는 SomeOtherClass에 대해 알고 있습니까? 나의 현재의 가설은 SomeClass에 커널을 삽입하고 Inject 메소드를 사용하는 것이다.
해답을 주셔서 감사 합니다만, 그것이 옳은 동안, 모든 종속성을 사전에 알아야한다고 말합니다. 이것이 불가능할 때 어떻게됩니까? (물론 내가 말하는 것은 객체가 동적으로 생성 될 때만 의미가 있습니다.) – sebas
SomeClass가 최종 수의 동적 객체를 만들어야한다고 가정 해 봅시다. SomeClass가 Level이되어 30 개의 별을 만들어야합니다. 별들은 어떤 의존성을 가지고 있습니다. 어떻게 레벨이 커널을 사용하여 별들에 의존성을 주입시킬 수 있습니까? – sebas
좋은 질문입니다.이 형식으로 대답 할 수있는 간단한 의존성 주입 질문을 넘어서고 있습니다. 이런 종류의 상황 (복잡한 객체 생성)은 한 조각 더 필요로하는 경향이 있는데, 이는 Remo가 공장에서 그의 대답을 언급 한 이유입니다. 별 - 빌딩 팩토리를 생성하고이를 SomeClass에 삽입하거나 Ninject가 팩터 리 메소드 자체 또는 Bind()를 사용하여 별을 해석하도록해야합니다. ToProvider(). –