C# - MEF - импорт из переносимой библиотеки классов
Кажется, я не могу загрузить класс, экспортированный из библиотеки PCL, в обычную библиотеку Windows.
Я использую пакет Nuget: http://www.nuget.org/packages/Microsoft.Composition/ (Microsoft Composition (MEF 2) 1.0.27)
Передача кода (внутри обычной DLL):
using System.ComponentModel.Composition;
namespace Normal
{
[Export]
public class TestExport
{
}
}
Сбой кода (внутри библиотеки PCL):
using System.Composition;
namespace PCL
{
[Export]
public class TestExport
{
}
}
Модульный тест (обычный тестовый проект):
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using PCL;
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
namespace UnitTest
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
AggregateCatalog catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(typeof(PCL.TestExport).Assembly));
catalog.Catalogs.Add(new AssemblyCatalog(typeof(Normal.TestExport).Assembly));
var container = new CompositionContainer(catalog, CompositionOptions.DisableSilentRejection);
CompositionBatch batch = new CompositionBatch();
batch.AddExportedValue(container);
container.ComposeParts(batch);
//Passes
PCL.TestExport constructed = new PCL.TestExport();
Normal.TestExport constructed2 = new Normal.TestExport();
//Passes
Normal.TestExport passes = container.GetExportedValue<Normal.TestExport>();
//Fails
PCL.TestExport e = container.GetExportedValue<PCL.TestExport>();
}
}
}
1 ответ
Решение
Ваш обычный проект DLL и модульный тест используют System.ComponentModel.Composition, который имеет значение "MEF 1". MEF 1 ничего не знает об атрибутах System.Composition (MEF 2).
Если вы можете использовать MEF 2 для всех ваших проектов, он должен работать.