假设我们有两个组件相互依赖(间接地,通过接口):
这会导致组合失败:组合失败是因为它在“100”次迭代内没有完成。这很可能是由于一个部件的依赖关系图中存在循环,该部件标有非共享创建策略。
我知道我可以通过Lazy声明导入,但这样做时,导入将在需要时按需创建,而我需要我的Alice引用Bob,而Bob引用同一个Alice实例。我希望CompositionContainer能够在一个组合操作中解决这种循环依赖关系,但显然并非如此。
我不能将部件声明为共享,因为我不需要每个容器只有一个Alice和Bob。我只需要当在一个组合操作中完成时,这些依赖图作为一个整体被创建。是否有任何解决方法?
更新:添加了一些澄清。
public interface IAlice { ... }
public interface IBob { ... }
[Export(typeof(IAlice)), PartCreationPolicy(CreationPolicy.NonShared)]
class Alice : IAlice
{
[Import]
private IBob Bob { get; set; }
...
}
// could be defined in some assembly developed by another team
[Export(typeof(IBob)), PartCreationPolicy(CreationPolicy.NonShared)]
class Bob : IBob
{
[Import]
private IAlice Alice { get; set; }
...
}
这会导致组合失败:组合失败是因为它在“100”次迭代内没有完成。这很可能是由于一个部件的依赖关系图中存在循环,该部件标有非共享创建策略。
我知道我可以通过Lazy声明导入,但这样做时,导入将在需要时按需创建,而我需要我的Alice引用Bob,而Bob引用同一个Alice实例。我希望CompositionContainer能够在一个组合操作中解决这种循环依赖关系,但显然并非如此。
我不能将部件声明为共享,因为我不需要每个容器只有一个Alice和Bob。我只需要当在一个组合操作中完成时,这些依赖图作为一个整体被创建。是否有任何解决方法?
更新:添加了一些澄清。