2 개의 생성자가있는 클래스가 있습니다.다른 구조체를 사용하기위한 맵핑
MyClass에()
및
MyClass에 (IMyService 서비스)
내가 할 때마다 내가 StructureMap를 어떻게 알 수 있습니까 후 '새 MyClass에()를'실제로 두 번째 생성자를 호출해야하지 첫 번째 생성자.
도와주세요.
2 개의 생성자가있는 클래스가 있습니다.다른 구조체를 사용하기위한 맵핑
MyClass에()
및
MyClass에 (IMyService 서비스)
내가 할 때마다 내가 StructureMap를 어떻게 알 수 있습니까 후 '새 MyClass에()를'실제로 두 번째 생성자를 호출해야하지 첫 번째 생성자.
도와주세요.
new MyClass()
을 호출하면 StructureMap이 전혀 관련되지 않습니다. 어떤 양의 StructureMap 구성으로도 동작이 변경되지 않습니다.
ObjectFactory.GetInstance<MyClass>()
을 호출하면 StructureMap은 기본적으로 더 많은 매개 변수로 생성자를 호출합니다.
당신이 StructureMap 다른 생성자를 사용하려는 경우, 당신은 (PHeiberg의 대답을 통해) 생성자 지정할 수 있습니다
x.SelectConstructor<IMyClass>(() => new MyClass(null));
을 아니면 단지 Use()
의 오버로드를 사용하여 인스턴스를 만드는 방법을 명시 적으로 StructureMap를 말할 수 받아들이는 Func<>
: 여호수아의 대답은 모든 측면을 덮고
x.For<IMyClass>().Use(ctx => new MyClass(ctx.GetInstance<IMyService>()))
. 당신이 SelectContructor 방법을 사용할 수 있습니다 여호수아의 예에서 수행으로 생성자에 인수를 하드 코딩하지 않고 특정 생성자를 선택 Structuremap를 구성하기 위해 보조 노트로 :
이x.SelectConstructor<MyService>(() => new MyService());
SelectConstructor 메서드 호출에 람다가 호출해야 필요한 생성자 (null 또는 모든 매개 변수에 대해 올바른 유형의 값을 입력하십시오). 자세한 내용은 the documentation을 참조하십시오.
구조체 맵과 같은 DI 컨테이너를 사용하는 경우 모든 클래스에 단 하나의 생성자 만있는 것이 가장 좋습니다. 이 생성자는 IMyService
이 종속성 (약간 이상하게 보임) 인 경우 클래스의 모든 종속성을 해결해야합니다. 이는 매개 변수없는 생성자가 필요 없도록 인스턴스화 할 때 항상 해결되어야합니다.
죄송합니다, 지금 수정했습니다. CMyService 대신 사용자 CMyClass가 있습니다. 감사. –
매개 변수가 2 개인 MyClass 생성자를 사용하려면 어떻게해야합니까? 'ctx.GetInstance <>'는 1 개의 타입 파라미터 만 허용합니다. –