Я пытаюсь добавить расширяемость плагина к моему приложению C# с использованием рамки Managed Extensibility Framework (MEF), и пока все идет нормально; У меня есть приложение для основного/хоста, загружающее плагины из определенной папки и вызывая их методы и т. Д. Из основного приложения. И приложение-хост, и плагины ссылаются на отдельную сборку dll, которая содержит интерфейсы, общие для всех проектов.Использование MEF с C#, как мне вызвать методы на хосте, из плагина?
Это нормально работает, и я могу звонить/взаимодействовать с плагинами из основного приложения. Тем не менее, я также хотел бы иметь возможность взаимодействовать с хост-приложением от плагинов, но, похоже, не может понять, как это делается.
Я хотел бы иметь возможность получить/установить/выполнить экспортированные свойства и методы в основном приложении из моих плагинов. В настоящее время я могу только «говорить» с плагинами из основного приложения, а не наоборот.
Мой код до сих пор:
Интерфейс 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