假设我们有两个相互依赖的组件(通过接口间接地):

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”次迭代中完成。这很可能是由零件的依赖关系图中标记有非共享创建策略的循环引起的。

我知道我可以通过惰性声明进行导入,但是当我需要我的Alice引用Bob和Bob引用同一个Alice实例时,将根据需要创建导入。我原以为CompositionContainer将在一个组合操作中解决此类循环,但显然并非如此。

我不能将零件声明为共享的,因为每个容器不需要一个爱丽丝和鲍勃。我只需要在一个合成操作中将这些依赖关系图创建为一个整体。有什么解决方法吗?

UPD。添加了一些说明。

最佳答案

为什么不让Alice通过ctor注入导入IBob,然后显式设置Bob的Alice属性(即Bob不应为Alice使用属性注入)?

关于c# - MEF循环依赖,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9752842/

10-11 19:19