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 для всех ваших проектов, он должен работать.

Другие вопросы по тегам