温莎城堡:如何防止在工厂创建的对象循环引用被创建的对象是指恢复到出厂
-
20-08-2019 - |
题
我使用温莎城堡作为我IoC容器,并在一个有点问题的运行。这是在代码中最好的解释,所以I'll试试看。 我有一个工厂类,即应我提供了一定接口的实现:
public interface IObjectCreatorFactory
{
IObjectCreator GetObjectCreator(Type objectType);
}
public interface IObjectCreator
{
T CreateObject<T>(IDataRow data);
bool SupportsType(Type type);
}
工厂类的实现看起来是这样的,虽然我不知道这是要走的路: 公共接口ObjectCreatorFactory:IObjectCreatorFactory { IEnumerable的specificCreators; IObjectCreator defaultCreator;
public ObjectCreatorFactory(IEnumerable<IObjectCreator> specificCreators, IObjectCreator defaultCreator)
{
this.specificCreators= specificCreators;
this.defaultCreator= defaultCreator;
}
public IObjectCreator GetObjectCreator(Type objectType)
{
foreach (IObjectCreator creator in specificCreators)
{
if (creator.SupportsType(objectType))
{
return creator;
}
}
return defaultCreator;
}
}
现在,这将制定出好的,但是如果我想我的IObjectCreator例如使用特定IObjectCreator创建子对象,我想打电话给ObjectCreatorFactory,这显然会导致一个循环引用:
public void SpecificObjectCreator:IObjectCreator
{
IObjectCreatorFactory objCreatorFactory;
public SpecificObjectCreator(IObjectCreatorFactory objCreatorFactory)
{
this.objCreatorFactory = objCreatorFactory;
}
T CreateObject<T>(IDataRow data)
{
T obj = new T;
ChildObject childObject = objCreatorFactory.GetObjectCreator(typeof(ChildObject)).CreateObject<ChildObject>(data);
.......
}
bool SupportsType(Type type);
}
这个不工作了。什么是去这种情况下,在创建的对象闯民宅回工厂子对象创作者的方法是什么?
解决方案
我将在工厂简单地移出的各种特定对象创建者的构造的,并引入IObjectCreator接口上的方法来代替,负责用于初始化创作者:
public interface IObjectCreator
{
T CreateObject<T>(IDataRow data);
bool SupportsType(Type type);
void Initialize(IObjectCreatorFactory factory);
}
和然后只传递到工厂的每个对象创建者调用Initialze(本)。
在我使用自定义生命周期阶段采取的自动调用“工后”组件既避免循环依赖的设置护理和也采取的其它相关的关注护理(即,从一个施加额外的组件配置在过去比如数据库的外部源) - 但它可能是你所需要的矫枉过正
不隶属于 StackOverflow