gpt4 book ai didi

c# - mef 中的意外结果

转载 作者:行者123 更新时间:2023-11-30 17:17:23 24 4
gpt4 key购买 nike

我是 MEF 的初学者。我写了这段代码,但我不明白为什么程序会显示这个结果。

namespace ConsoleApplication1
{
public class MEFTest
{
[Import]
public string Text { get; set; }

[Import]
public IExtension Ext { get; set; }

public void ShowText()
{
AssemblyCatalog asscatalog = new AssemblyCatalog(typeof(Extension2).Assembly);
CompositionContainer container = new CompositionContainer(asscatalog);

CompositionBatch batch = new CompositionBatch();
batch.AddPart(this);

container.Compose(batch);

Console.WriteLine(Text);
Console.WriteLine(Ext.Text);
}
}
class Program
{
static void Main( string[] args )
{
MEFTest mef = new MEFTest();

mef.ShowText();

Console.ReadKey();
}
}

public interface IExtension
{
string Text { get; set; }
}

[Export]
public class Extension1 : IExtension
{
[Export]
public string Text { get; set; }

public Extension1()
{
Text = "From Extension1.";
}
}

[Export(typeof(IExtension))]
public class Extension2 : IExtension
{
// [Export(typeof(IExtension).GetProperties()[0].GetType())]
public string Text { get; set; }

public Extension2()
{
Text = "From Extension2.";
}
}
}

结果:

来自分机 1。来自 Extension2。

最佳答案

这正是 MEF 匹配您的导入的方式。因为你有:

    [Import]
public string Text { get; set; }

在这种情况下,MEF 找到“字符串文本”并进行匹配。这发生在 Extention1 中,但只是因为您明确地向其 Text 属性添加了导出

    [Import]
public IExtension Ext { get; set; }

这会找到 IExtension 类型的实际 Export。其中唯一的一个是您的 Extension2 类。这满足了这个要求。

关于c# - mef 中的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6538712/

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