문제

나는 MEF를 가져 오는 데 어려움을 겪고 있으며 도움을받을 수 있고 도움을받을 수 있습니다.

불행히도 문제는 프로덕션 코드 기반에서만 나타납니다. 나는 문제를 간소화하려고 노력 했으므로 예를 게시하고 나의 이해의 부족이있는 곳을 확인할 수 있지만 단순화 된 버전이 작동했습니다. 그래서 이것은 차이를 놓치고 있습니다 (그리고 나는 2 개에서 철저하게 보이기 위해 최선을 다했거나 복잡성이 필요합니다.

INET 4.5 클래스 라이브러리 및 휴대용 클래스 라이브러리 (.NET 4.5 및 Windows 8 저장소 응용 프로그램)를 사용하는 WPF 응용 프로그램이 있습니다. 나는 아직 Windows 8 저장소 응용 프로그램을 가지고 있지 않지만 계획 (따라서 두통)을 계획합니다. 나는 최근에 Nuget에서 벗어난 Mef 2를 사용하고 있습니다.

  <package id="Microsoft.Composition" version="1.0.20" targetFramework="portable-net45+win" />
.

나는 실제 코드를 게시 할 수 없기 때문에 이것을 디버그하는 방법에 대한 조언은 내가 찾고있는 것을 추측한다. 대부분의 온라인 조언은 내가 디버그하는 방법을 찾을 수 있으며, 적어도이 PCL 호환 버전이 아닌 MEF 2에서 작동하지 않는 것 같습니다. 다음은 단순화 된 버전이지만 다시이 버전이 작동합니다.

namespace Portable.Contracts
{
    public interface IExportable
    {
        string Name { get; }
    }
}

namespace Desktop
{
    [Export(typeof(IExportable))]
    public class Exported : IExportable
    {
        public string Name
        {
            get { return "Exported"; }
        }
    }
}

namespace Portable
{
    public class Importer
    {
        [Import]
        public IExportable Exportable { get; set; }

        public Importer()
        {
            MEFLoader.ResolveImports(this);
        }

        public string Name { get { return Exportable.Name; } }
    }
}

namespace Portable
{
    public class MEFLoader
    {
        private static CompositionHost Container { get; set; }
        public static void SetContainer(CompositionHost container)
        {
            Container = container;
        }
        public static void ResolveImports(object target)
        {
            if(Container != null)
            {
                Container.SatisfyImports(target);
            }
        }
    }
}

namespace WPFApp
{
    public partial class App : Application
    {
        public App()
        {
            var container = new ContainerConfiguration()
                .WithAssembly(typeof(Exported).Assembly)
                .CreateContainer();
            MEFLoader.SetContainer(container);

            var importer = new Importer();
            var importedName = importer.Name;
        }
    }
}
.

ImportEdName은 "내 보낸 값"값을 가져옵니다. 생산 코드에서는 Details로 CompositionFaileDexception을 얻습니다.

추가 정보 : 누락 된 종속성 'userInformation' 'mainwindowviewmodel'.

도움이 되었습니까?

해결책

내 근본 원인을 찾았습니다.

내 .NET 4.5 어셈블리가 MEF에서 사용 중이

using System.ComponentModel.Composition;
.

내 PCL 조립이 사용되었지만 다음을 사용하고있었습니다.

using System.Composition;
.

SystemCompositition으로 모든 것을 업데이트합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top