【发布时间】:2014-03-29 22:03:56
【问题描述】:
我目前正在为我的程序使用 IoC 容器 unity。
我有多个连锁工厂。一个调用下一个来创建填充属性所需的对象。所有工厂都使用相同的原始数据对象来构建它们各自的对象。原始数据对象描述了如何创建所有不同的对象。目前每个工厂都有一个 Create 方法,该方法接受几个参数来说明对象代表的位置。
我的问题是如何/在哪里将原始数据对象传递给每个工厂,以便他们完成工作?
将对象注入 Create() 方法似乎比面向对象更具程序性。但是,如果我将对象注入每个工厂的构造函数,那么我将如何正确解析每个工厂。更不用说这些工厂需要能够处理不同的原始数据对象。也许总体上有更好的架构?
下面表示我拥有的结构类型,减去将原始对象传递到任何地方。
class PhysicalObjectFactory
{
private readonly StructureAFactory _structureAFactory;
private readonly Parser _parser;
public PhysicalObjectFactory(StructureAFactory structureAFactory, Parser _parser)
{
_structureAFactory = structureAFactory;
this._parser = _parser;
}
public PhysicalObject CreatePhysicalObject()
{
RawDataObject rawDataObject = _parser.GetFromFile("foo.txt");
// do stuff
PhysicalObject physicalObject = new PhysicalObject();
physicalObject.StructureA = _structureAFactory.Create(num1, num2);
// do more stuff
return physicalObject;
}
}
class StructureAFactory
{
private readonly StructureBFactory _structureBFactory;
public StructureAFactory(StructureBFactory structureBFactory)
{
_structureBFactory = structureBFactory;
}
public StructureA Create(int a, int b)
{
// do stuff
StructureA structureA = new StructureA();
structureA.StructureB = _structureBFactory.Create(num76, num33);
// do more stuff
return structureA;
}
}
class StructureBFactory
{
public StructureBFactory(){}
public StructureB Create(int a, int b)
{
StructureB structureB = new StructureB();
// do stuff
return structureB;
}
}
【问题讨论】:
标签: c# design-patterns dependency-injection inversion-of-control unity-container