DI和IoC的工厂方法我熟悉这些模式,但仍然不知道如何处理以下情况:public class CarFactory{
public CarFactory(Dep1,Dep2,Dep3,Dep4,Dep5,Dep6)
{
}
public ICar CreateCar(type)
{
switch(type)
{
case A:
return new Car1(Dep1,Dep2,Dep3);
break;
case B:
return new Car2(Dep4,Dep5,Dep6);
break;
}
}}一般来说,问题在于需要注入的引用量。如果有更多的汽车,情况会更糟。我想到的第一种方法是在工厂构造函数中注入Car1和Car2,但这是反对工厂方法的,因为工厂总是返回相同的对象。第二种方法是注入servicelocator,但它在任何地方都是反模式的。如何解决?编辑:备选办法1:public class CarFactory{
public CarFactory(IContainer container)
{
_container = container;
}
public ICar CreateCar(type)
{
switch(type)
{
case A:
return _container.Resolve<ICar1>();
break;
case B:
return _container.Resolve<ICar2>();
break;
}
}}可供选择的方法2(由于树中的依赖关系太多而难以使用):public class CarFactory{
public CarFactory()
{
}
public ICar CreateCar(type)
{
switch(type)
{
case A:
return new Car1(new Dep1(),new Dep2(new Dep683(),new Dep684()),....)
break;
case B:
return new Car2(new Dep4(),new Dep5(new Dep777(),new Dep684()),....)
break;
}
}}
3 回答
皈依舞
TA贡献1851条经验 获得超3个赞
Composition Root
public class CarFactory{ private readonly Func<Type, ICar> carFactory; public CarFactory(Func<Type, ICar> carFactory) { this.carFactory = carFactory; } public ICar CreateCar(Type carType) { return carFactory(carType); }
Composition Root
Func<Type, ICar> carFactoryFunc = type => (ICar)container.Resolve(type);container.RegisterInstance<CarFactory>(new CarFactory(carFactoryFunc));
- 3 回答
- 0 关注
- 459 浏览
添加回答
举报
0/150
提交
取消