Home >Backend Development >C++ >How Can Dependency Injection Solve the Problem of Many Dependencies in a Factory Method?
Factory methods using dependency injection and inversion of control
Question:
When factory methods create different objects, they need to handle a large number of passed dependencies.
Problem:
Using switch case statements in factories is a bad code smell. It introduces dependencies into the factory itself and makes it difficult to extend.
Solution: Dependency Injection Strategy Pattern
Interface:
Define car factory and car strategy interfaces to decouple car creation from concrete implementation.
<code>public interface ICarFactory { ICar CreateCar(); bool AppliesTo(Type type); } public interface ICarStrategy { ICar CreateCar(Type type); }</code>
Factory:
Implement separate factories for each car type. The dependencies of these factories will be injected by the DI container.
<code>public class Car1Factory : ICarFactory { private readonly IDep1 dep1; private readonly IDep2 dep2; private readonly IDep3 dep3; // ... (构造函数和工厂方法) }</code>
Strategy:
The car strategy class will use the factory interface to create the car based on the input type.
<code>public class CarStrategy : ICarStrategy { private readonly ICarFactory[] carFactories; // ... (构造函数和策略方法) }</code>
Usage:
In the composition root, inject the appropriate dependencies into the factory class and create the car strategy. Use this strategy to create the desired car type.
<code>var strategy = new CarStrategy(new ICarFactory[] { new Car1Factory(dep1, dep2, dep3), // ... }); var car1 = strategy.CreateCar(typeof(Car1));</code>
Advantages:
The above is the detailed content of How Can Dependency Injection Solve the Problem of Many Dependencies in a Factory Method?. For more information, please follow other related articles on the PHP Chinese website!