私は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.";
}
}
}
結果:のExtension1から
。 拡張機能2から。
結果はForm Extenstion1ですか?フォームエクステンション2? – Jethro
Hazai、下記のReedのように、[Import] public文字列Text {get; set;}を削除する必要があります。 – Jethro