Managed Extensibility Framework (MEF)フレームワークを使用して、C#アプリケーションにプラグインの拡張性を追加しようとしています。私は定義されたフォルダからメイン/ホストアプリケーションのプラグインを読み込み、メインアプリケーションからメソッドなどを呼び出すことができます。ホストアプリケーションとプラグインは、すべてのプロジェクトに共通のインタフェースを含む個別のdllアセンブリを参照します。C#でMEFを使用すると、プラグインからホスト上のメソッドをどのように呼び出すことができますか?
これは正常に動作しており、メインアプリケーションのプラグインとのやりとりや対話ができます。しかし、私はまた、プラグインをからホストアプリケーションとやりとりしたいと思っていますが、これがどのように行われているかはわかりません。
私は、プラグインからメインアプリケーションのエクスポートされたプロパティとメソッドを取得/設定/実行できるようにしたいと考えています。現在のところ、私は主なアプリからのプラグインだけを「話す」ことができますが、それ以外の方法ではありません。これまで
マイコード:
インタフェースDLL
namespace MefContracts
{
[InheritedExport]
public interface IPlugin
{
String DoWork();
}
public class Class1
{
public IPlugin plugin { get; set; }
}
}
メイン/ホストアプリケーション
namespace MyMEF
{
class clsMEF
{
private CompositionContainer _container;
[Import(typeof(MefContracts.IPlugin))]
public MefContracts.IPlugin plugin;
public clsMEF()
{
Compose();
}
void Compose()
{
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new DirectoryCatalog("..\\..\\Extensions"));
_container = new CompositionContainer(catalog);
try
{
this._container.ComposeParts(this);
}
catch (CompositionException compositionException)
{
Console.WriteLine(compositionException.ToString());
}
}
}
void Main()
{
clsMEF myMef = new clsMEF();
MessageBox.Show(myMef.plugin.DoWork());
}
}
プラグイン
namespace MefPlugin
{
[Export]
public class Class1 : MefContracts.IPlugin
{
public String DoWork()
{
return "Plugin called";
}
}
}
私のホストメンバーは決して投入されません。あなたはそれに遭遇しましたか? – jsmith
@jsmith - 遅い返信をおかけして申し訳ありませんが、私はこの時点で直面していた最初の問題だと思います。あなたがこれをまだ解決しておらず、別の質問にコードを投稿したい場合は、ここをリンクしてください。私は喜んで見ていきます。 – Alfie