Ich versuche, Plugin-Erweiterbarkeit zu meiner C# -Anwendung mit dem Managed Extensibility Framework (MEF) Framework hinzufügen, und bis jetzt ist es in Ordnung; Ich habe meine Haupt/Host-Anwendung laden Plugins aus einem definierten Ordner und kann ihre Methoden usw. aus der Hauptanwendung aufrufen. Sowohl die Host-Anwendung als auch die Plugins verweisen auf eine separate DLL-Assembly, die die für alle Projekte gemeinsamen Schnittstellen enthält.Mit MEF mit C#, wie rufe ich Methoden auf dem Host, vom Plugin?
Das funktioniert gut und ich kann mit den Plugins aus der Hauptanwendung aufrufen/interagieren. Allerdings möchte ich auch mit der Host-Anwendung von die Plugins interagieren können, aber kann nicht herausfinden, wie dies getan wird.
Ich möchte exportierte Eigenschaften und Methoden in der Hauptanwendung von meinen Plugins erhalten/setzen/ausführen lassen. Momentan kann ich nur mit den Plugins von der Haupt-App "sprechen", nicht umgekehrt.
Mein Code so weit:
Schnittstelle DLL
namespace MefContracts
{
[InheritedExport]
public interface IPlugin
{
String DoWork();
}
public class Class1
{
public IPlugin plugin { get; set; }
}
}
Main/Host-Anwendung
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());
}
}
Plugin
namespace MefPlugin
{
[Export]
public class Class1 : MefContracts.IPlugin
{
public String DoWork()
{
return "Plugin called";
}
}
}
Mein Gastgebermitglied wird nie ausgefüllt. Ist dir das jemals begegnet? – jsmith
@jsmith - Sorry für die späte Antwort, aber ich denke, das war das anfängliche Problem, mit dem ich zu dieser Zeit konfrontiert war. Wenn Sie dies noch nicht gelöst haben und Ihren Code auf eine andere Frage und einen Link hier posten möchten, schaue ich gerne vorbei. – Alfie