.NET 4.5、Windows Store PCLとMEF 2の構成
-
21-12-2019 - |
質問
私は輸入を満足させ、いくつかの助けを使うことができるようにするのに問題があります。
残念ながら、問題は生産コードベースにのみ現れます。私はその問題を簡単にしようとしましたので、私は例を投稿して私の理解の欠如がどこにあるのかを確認しましたが、単純化されたバージョンが機能しました。だから私は私が違いを欠いている(そして私は2つの2つで徹底的に見るために最善を尽くしました)、または複雑さが再現するために必要です。
私は、.NET 4.5クラスライブラリとポータブルクラスライブラリを消費するWPFアプリケーションを持っています(.NET 4.5およびWindows 8 Store Appをターゲットにしています)。私はまだWindows 8ストアアプリケーションを持っていませんが、予定されている(したがって頭痛)。私は最近NUGETから引き出されたMEF 2を使っています:
<package id="Microsoft.Composition" version="1.0.20" targetFramework="portable-net45+win" />
.
私は私が探していることを推測しています私は実際のコードを投稿することができないので、これをデバッグする方法についてのいくつかのアドバイスです。ほとんどのオンラインアドバイスでは、このPCL互換バージョンは少なくともこのPCL互換バージョンではなく、Debugを見つける方法について検索できます。以下は私の単純化されたバージョンですが、再びこのバージョンは動作します。
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は値 "エクスポート"を取得します。私のプロダクションコードでは、詳細を指定してPoditionFailedExceptionを取得します。
追加情報:依存関係の「userinformation」をオンにしていない 'MainWindowViewModel'。
解決
私の根本原因を見つけました。
私の.NET 4.5アセンブリはMEFに入っていました:
using System.ComponentModel.Composition;
.
PCLが組み立てられている間に:
using System.Composition;
.
System.ComPositionにすべてのアップデート問題を解決しました。