gpt4 book ai didi

c# - MEF循环依赖

转载 作者:行者123 更新时间:2023-11-30 16:25:33 25 4
gpt4 key购买 nike

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

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。我只需要在一次组合操作中完成此类依赖关系图时将其创建为一个整体。有什么解决方法吗?

更新。添加了一些说明。

最佳答案

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com