MEF 2 を使用してアプリケーションに取り組んでいます。プラグインを設計する属性のない方法を試してみたかったのですが、現在、オブジェクトの 1 つがそのインポートを満たしていないように見える理由を理解しようとしています。以下はサンプルコードです。
using System;
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
using System.ComponentModel.Composition.Registration;
using System.Reflection;
namespace MEF2
{
class Program
{
static void Main(string[] args)
{
var builder = new RegistrationBuilder();
builder.ForType<ExporterClass>().Export<ExporterClass>();
builder.ForType<ImporterClass>().Export().ImportProperties(p => p.Name == "Exporter");
var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly(), builder);
CompositionContainer container = new CompositionContainer(catalog);
ImporterClass t = new ImporterClass();
container.ComposeParts(t);
t.ShowWalkers();
}
}
public class ExporterClass
{
public void Write()
{
Console.WriteLine("Test");
}
}
public class ImporterClass : IPartImportsSatisfiedNotification
{
//[Import]
private ExporterClass Exporter { get; set; }
public void ShowWalkers()
{
if (Exporter != null)
Exporter.Write();
}
public void OnImportsSatisfied()
{
Console.WriteLine("IPartImportsSatisfiedNotification");
}
}
}
OnInputSatisfied
イベントは発生しますが、Exporter プロパティはまだ null です。[Import]
属性のコメントを外すと、すべてが機能します。
属性なしでインポートするにはどうすればよいですか?