2010-03-25 4 views
0

주입 된 객체를 만들 때 사용자 정의 initislisation 코드를 어떻게 실행할 수 있는지 궁금합니다. 즉. IWeapon을 구현하는 Sword 클래스가 있지만 Sword 클래스 생성자에 히트 포인트 값을 전달하고 싶습니다. 어떻게 구현합니까? 나 자신의 공급자를 써야합니까?Ninject - 초기화 객체

IKernel 커널 = 새로운 StandardKernel (새 Module1(), 새 Module2(), ...); 커널에서 여러 개의 모듈을 실제로 사용하는 것은 무엇입니까? 나는 그것을 이해하지만 누군가 나에게 공식적인 설명과 유스 케이스를 줄 수 있겠는가?

고맙습니다.

제임스

답변

1

이 생성자 클래스의 검이있는 경우 :

public Sword(int hitPoints) 
    ... 

오히려 공급자를 구현하는 것보다,이 같은 칼을 인스턴스화하는 것이 좋습니다 :

IWeapon sword1 = kernel.Get<IWeapon>(With.Parameters.ConstructorArgument("hitPoints", 10)); 
IWeapon sword2 = kernel.Get<IWeapon>(With.Parameters.ConstructorArgument("hitPoints", 20)); 
+0

좋은 대답을, 이제 Warrior 클래스에서 IWeapon의 Sword 클래스를 사용하면 어떻게됩니까? 예 : Warrior james = kernel.Get (); 체력치를 Sword 오브젝트로 어떻게 전달합니까? –

+0

이 명령을 실행해야하는 경우 IWeapon sword1 = kernel.Get (With.Parameters.ConstructorArgument ("hitPoints", 10)); 검 개체를 얻으려면 왜 Iweapon을 실행하면 안됩니까? sowrd1 = new Sword (10); ??? –

+0

좋은 질문입니다. 첫 번째 질문에 대답하기 위해, 당신이 통제의 수준을 필요로한다면 당신은 발표자를 사용하여 검 인스턴스를 인스턴스화해야합니다. 두 번째 질문에서, 의존성 주입의 힘은 설계를 구현과 분리 할 수 ​​있다는 것입니다. 당신이 항상 칼을 원한다면, 당신은 항상 칼을 원한다는 것을 안다면, 아마도 DI는 필요하지 않을 것입니다. – anthony