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;
}
}}一般來說,問題在于需要注入的引用量。如果有更多的汽車,情況會更糟。我想到的第一種方法是在工廠構(gòu)造函數(shù)中注入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(由于樹中的依賴關(guān)系太多而難以使用):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貢獻1784條經(jīng)驗 獲得超8個贊
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 關(guān)注
- 286 瀏覽
添加回答
舉報
0/150
提交
取消