Я пытаюсь реализовать инверсию управления (IoC) для разработки приложения на основе плагина, которое должно быть в состоянии передать данные (например, строки) обратно на мой основной EXE, когда что-то происходит. Для этого я передаю Action
в DLL, которую он может использовать для отправки данных обратно в EXE. Следующий код показывает небольшое тестовое приложение, чтобы объяснить мои новичок проблемы:Как передать функцию другому классу с помощью IoC
namespace MainExe
{
class Program
{
[Import(typeof(IDataProvider))]
public IDataProvider stringProvider { get; set; }
public void myCallback(string str)
{
Console.WriteLine(str);
}
public Program()
{
try
{
AggregateCatalog aggregatecatalogue = new AggregateCatalog();
aggregatecatalogue.Catalogs.Add(new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory));
CompositionContainer container = new CompositionContainer(aggregatecatalogue);
container.ComposeParts(this);
}
catch (FileNotFoundException fnfex)
{
Console.WriteLine(fnfex.Message);
}
catch (CompositionException cex)
{
Console.WriteLine(cex.Message);
}
}
void Run()
{
if (stringProvider != null)
{
stringProvider.SaySomething("myrequest", myCallback);
Console.ReadKey();
}
}
static void Main(string[] args)
{
Program program = new Program();
program.Run();
}
}
}
Моего интерфейс выглядит следующим образом:
namespace DataInterfaceDll
{
public interface IDataProvider
{
void SaySomething(string request, Action<string> callback);
}
}
И это Plug-In (DLL), которые должны быть в состоянии послать что-то обратно в EXE (или вызвать функцию из EXE, которая делает это):
namespace StringDataDll
{
[Export(typeof(IDataProvider))]
public class StringData : IDataProvider
{
public void SaySomething(string request, Action<string> callback)
{
callback("This is just a test program...");
}
}
}
Когда я запускаю этот код, я получаю System.Reflection.ReflectionTypeLoadException
в следующей строке
container.ComposeParts(this);
Может ли кто-нибудь сказать мне, что я делаю неправильно здесь?
Есть ли копия dll StringDataDll в той же папке, что и исполняемый файл? –