gpt4 book ai didi

ioc-container - MEF 缺少什么才能与 IoC 容器相提并论?

转载 作者:行者123 更新时间:2023-12-04 14:05:25 28 4
gpt4 key购买 nike

MEF is not an IoC container .不过好像是差不多 一个 IoC 容器。似乎我可以很容易地让 MEF 表现得像一个 IoC 容器(见下面的例子),而且让 MEF 成为一个完整的 IoC 容器并没有太多遗漏。

MEF 中缺少哪些StrucureMap、Unity 等必须具备的实际功能?

你会认为,this feaure request说得通?

using System;  
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
using System.ComponentModel.Composition.Primitives;
using System.Linq;
...
private CompositionContainer container;
public void Configure()
{
container = CompositionHost.Initialize(
new AggregateCatalog(
AssemblySource.Instance.Select(
x => new AssemblyCatalog(x)).OfType<ComposablePartCatalog>()));
var batch = new CompositionBatch();
batch.AddExportedValue<IWindowManager>(new WindowManager());
batch.AddExportedValue<IEventAggregator>(new EventAggregator());
batch.AddExportedValue(container);
container.Compose(batch);
}

最佳答案

What is missing in MEF to be on par with IoC containers?



一种轻松诊断组合中问题的方法。

比如你有一个依赖链A -> B -> C -> D,而D缺失,那么按照 stable composition的原则MEF 将简单地将 A、B 和 C 标记为不可用,并尝试在没有这些部分的情况下进行合成。您的错误消息将提示 A,而不是 D。

要诊断问题,您必须以某种方式转储组合诊断(例如使用 mefx )并煞费苦心地沿着依赖路径向下,直到找到实际问题。这是一个痛苦但有点工作,直到你引入循环依赖......

普通的 IoC 容器没有这个问题。它只会告诉你“嘿,你已经注册了 C 用于组合,但我似乎找不到它的依赖项 D”。

另见我的 blog post关于这个话题。

关于ioc-container - MEF 缺少什么才能与 IoC 容器相提并论?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6384221/

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