개체에 개체를 주입해야하는지, 개체를 내부적으로 만들어야 하는지를 이해하려고합니다.DI 원칙에 따라 C'tor 매개 변수로 주입해야하는 것은 무엇입니까?
- 나는 실행 시간 동안 수집 된 정보를 보유하는
List<int>
(데이터 필드로)이있는 경우. 그것을 삽입하는 대신 c'tor에서 초기화해야합니다.
하지만 COM 포트를 통해 통신하는 하드웨어 클래스는 무엇입니까?
HW 클래스를 SerialPort로 초기화 시키거나 주입합니까?
- 위에서 언급 한 SerialPort를 삽입해야하는 경우; 가장 좋은 방법은 무엇입니까?
내가 수동으로 생성 할 :
SerialPort port = new SerialPort(name, baud ...);
HWClass hwClass = container.Reolve<IHWClass>("HWClass", new InjectionConstructor(port));
또는 유니티 컨테이너
SerialPort port = conatiner.Resolve<SerialPort>(...);
HWClass hwClass = container.Reolve<IHWClass>("HWClass", new InjectionConstructor(port));
또는 내가 HWClass C'tor 내부를 init을해야을 사용하고 계십니까? 당신은
아디 엘
예를 들어 SerialPort가 스트림처럼 상속되거나 스트림처럼 동작하는 경우 인터페이스 대신 Stream을 사용하십시오. – strager
감사합니다. 사실 나는 꽤 구체적인 클래스입니다. NET FW의 System.IO.Ports.SerialPort를 참조했다. 그것이 주입 목적을위한 인터페이스로 포장하는 것은 꽤 인공적으로 보이지 않습니다. "인터페이스를 추출 할 수없는 경우 - 주사하지 마십시오!"라고 소리가납니다. 내가 잘못 ? Unity를 사용하여 SerialPort를 만들면 어떤 이점이 있습니까? 아니면이 경우 직접 만들 때와 동일합니까? –
기존 API를 래핑하는 것은 아주 정상입니다. http://stackoverflow.com/questions/3264992/wrapping-an-api-to-support-dependency-injection 인터페이스가 이미 마련되어 있다면 분명 더 쉬워 질 것입니다.하지만 보잘것없는 일을하는 보람있는 일. –