У меня есть 3 библиотеки классов, LibA, LibB и LibC. В этих библиотеках определены классы A, B и C соответственно.
class C
{
public IEnumerable<X> FuncInC()
{
return something;
}
}
LibC добавлен в качестве ссылки в LibB. И класс B использует класс C. Используя MEF, я экспортировал класс B из LibB.
[Export(typeof(InterfaceForB))]
class B : InterfaceForB
{
public IEnumerable<X> FuncInB()
{
return new C().FuncInC();
}
}
В классе A я использую экспортированный класс из B следующим образом.
public class A : InterfaceForA
{
[Import(typeof(InterfaceForB))]
private InterfaceForB _b;
private CompositionContainer _container;
public A()
{
var _catalog = new DirectoryCatalog(System.IO.Directory.GetCurrentDirectory());
_container = new CompositionContainer(_catalog);
_b = _container.GetExportedValue<InterfaceForB>();
}
public IEnumerable<X> FuncInA()
{
return _b.FuncInB();
}
}
Когда я запускаю FuncInA()
, он вызывает FileNotFoundException
со следующими данными:
"Не удалось загрузить файл или сборку
LibC, версия = 1.0.0.0,
Культура = нейтральная, PublicKeyToken = null '
или одна из его зависимостей. Система
не могу найти указанный файл. "
Примечание:
- Ссылка на LibC существует в LibB и собирается без ошибок.
- И все сборки (в данном случае выходные dll) находятся в одной папке.
- Если я прокомментирую код «return new C (). FuncInC ();» в определении FuncInB () и возвращает фиктивный объект, он работает без ошибок. Проблема из-за использования LibC в качестве ссылки.