IOC- 프레임 워크에서 인수를 생성자에게 전달하는 방법
-
02-07-2019 - |
문제
IOC- 프레임 워크의 생성자에게 인수를 전달하려면 어떻게해야합니까? 나는 다음과 같은 일을하고 싶다 : (ioc- 프레임 워크가 되려고 노력하고있다;)))))))))
object objectToLogFor = xxx;
container.Resolve<ILogging>(objectToLogFor);
public class MyLogging : ILogging
{
public MyLogging(object objectToLogFor){}
}
이것은 StructureMap에서는 불가능한 것 같습니다. 그러나 나는 누군가가 나를 잘못 증명하는 것을보고 싶다.
다른 프레임 워크가 기능이 더 풍부합니까? 아니면 IOC- 프레임 워크를 잘못 사용하고 있습니까?
해결책
구조 맵에서 with 메소드를 사용하여이를 달성 할 수 있습니다.
string objectToLogFor = "PolicyName";
ObjectFactory.With<string>(objectToLogFor).GetInstance<ILogging>();
다른 팁
Castle Windsor :
var foo = "foo";
var service = this.container.Resolve<TContract>(new { constructorArg1 = foo });
생성자 인수를 지정하기 위해 익명 객체를 사용하십시오.
StructureMap 사용 :
var foo = "foo";
var service = container.With(foo).GetInstance<TContract>();
이것이 어떻게 언어에 대한 언어가 될 수 있습니까? 이것은 해당 프레임 워크의 구현 세부 사항입니다.
스프링은 당신이 당신의 일이라면 값/참조 목록으로 c'tor args를 지정하도록합니다. 그러나 부동산 주입과 비교할 때 읽기 쉬운 것은 아닙니다.
어떤 사람들은 이것에 대해 칼라 아래에서 뜨거워지고, c'tor 주입은 Java에서 유일한 실-안전한 접근법이라고 주장합니다. 기술적으로 그들은 정확하지만 실제로는 중요하지 않은 경향이 있습니다.
그것은 매우 일반적인 요구가 아니어야하지만 때로는 유효한 것입니다. 새끼, StructureMap보다 가벼워서 컨텍스트에서 과도 객체를 검색 할 때 매개 변수를 전달할 수 있습니다. Spring.net 도.
대부분의 경우, IOC 컨테이너에서 선언 된 객체는 일시적이지 않으며 생성자/속성/방법을 통해 다른 비 유도 물체를 의존성으로 받아들입니다.
그러나 컨테이너를 공장으로 사용하지 않아도되고 해결하려는 물체를 충분히 제어 할 수 있다면 어떤 식 으로든 자연스럽고 위험한 소리가 덜 될 경우에도 속성 또는 방법 주입을 사용할 수 있습니다.
예, 다른 프레임 워크는 기능이 더 풍부합니다. 생성자 주입을 허용하는 IOC 프레임 워크를 사용해야합니다. Spring은 생성자 의존성 주입을 허용하는 다중 언어 IOC 컨테이너의 예입니다.
다른 IOC 프레임 워크는 더 많은 기능이 풍부합니다.
즉, 확인하십시오 Parameterresolution AutoFac과 함께
윈저로 쉽게 할 수 있습니다