질문:
팩토리 메서드 패턴에 익숙하지만 팩토리 생성자에서 많은 수의 종속성을 관리하는 데 어려움을 겪고 있습니다. 콘크리트 자동차 클래스를 공장에 주입하려고 하지만 이는 공장 원칙을 위반합니다. 또한 서비스 로케이터는 안티 패턴으로 알려져 있으므로 사용하고 싶지 않습니다.
해결책:
이 시나리오에 가장 적합한 방법은 전략 모드입니다. 이 패턴을 사용하면 DI 컨테이너가 자신에 속한 팩토리 인스턴스에 종속성을 주입할 수 있으므로 서비스 로케이터를 사용하거나 종속성이 있는 다른 클래스를 복잡하게 만들 필요가 없습니다.
인터페이스:
<code>public interface ICarFactory { ICar CreateCar(); bool AppliesTo(Type type); } public interface ICarStrategy { ICar CreateCar(Type type); }</code>
공장 :
<code>public class Car1Factory : ICarFactory { private readonly IDep1 dep1; private readonly IDep2 dep2; private readonly IDep3 dep3; // ... 构造函数和实现 } public class Car2Factory : ICarFactory { private readonly IDep4 dep4; private readonly IDep5 dep5; private readonly IDep6 dep6; // ... 构造函数和实现 }</code>
전략:
<code>public class CarStrategy : ICarStrategy { private readonly ICarFactory[] carFactories; public CarStrategy(ICarFactory[] carFactories) { // ... 构造函数和实现 } }</code>
사용법:
<code>var strategy = new CarStrategy(new ICarFactory[] { new Car1Factory(dep1, dep2, dep3), new Car2Factory(dep4, dep5, dep6) }); var car1 = strategy.CreateCar(typeof(Car1)); var car2 = strategy.CreateCar(typeof(Car2));</code>
장점:
위 내용은 종속성 주입은 종속성이 많은 팩토리 메서드 문제를 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!