問題タブ [mef2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
2438 参照

mef - MEF 2 には何が含まれていますか?

MEF ( MEF Codeplex サイト) の新機能の作業がまだ進行中であり、MEF 2 ベータ リリースが出荷されていますが、新機能の実験/調査/構築に関する適切なドキュメントはありませんか?

では、MEF 2 の一部である新機能は何ですか (少し詳しくお願いします。

0 投票する
1 に答える
2464 参照

c# - MEF2 インポートの良い例

以前に MEF を使用したことがありますが、新しい実装で問題が発生しています。[InheritedExport] 属性を持つ基本クラスから継承するオブジェクトをエクスポートしており、それらをインポートしようとしています。

以前は、[ImportMany(typeof(mytype))] を使用して配列プロパティを設定し、CompositionInitializer.SatisfyImports(this) を使用してインポートを機能させていましたが、今では 2 つの問題があります。

1) エクスポートは別の参照アセンブリにあります。2) 4.5 フレームワークの新しい MEF には、CompositionInitializer が存在しないようです。

問題#1を解決するためにAggregateCatalogを作成しようとしていますが、ここからどこに行くべきかわかりません。

最後に、WPF アプリ全体で使用できるコレクションをインポートしようとしています。全体的な解決策を提案する際に誰かが助けてくれるなら。

0 投票する
1 に答える
1564 参照

c# - Mef2 各モジュールでの登録の構成

わかりましたので、C# WPF アプリで .Net 4.5 を使用して Caliburn Micro と Mef2 を使用しています。別のdll内でMef2の登録を構成し、それらをメインのdll内で使用できる方法があるかどうか疑問に思っています。基本的に、dll は独自のインポートとエクスポートを構成します。

何かのようなもの:

各dllに含まれていますが、すべての登録を1つのRegistrationBuilderにマージしてから各カタログに渡すという点で立ち往生しています。

0 投票する
2 に答える
4222 参照

c# - MEF2 カタログはどのように機能しますか? 削除された模様

MEF2 で良い例が見つかりません。

プラグイン ディレクトリを作成し、ディレクトリ カタログを使用してインポートをロードしたいと考えています。

私が欲しいもの:

  1. 属性なし。規則での構成ビルダーの使用
  2. プラグイン ディレクトリ
  3. dll が追加されると、アプリケーションは利用可能な新しいエクスポートを認識します。

これにキャッスルウィンザーを使用できますか?

0 投票する
1 に答える
1252 参照

c# - MEF DirectoryCatalog が同じ dll を何度も読み取る

ディレクトリからいくつかのdll(プラグイン)をロードするMEFの簡単な実装がありました。これは MEF1 でうまく動作していましたが、同じ機能を MEF2 で使用したいと思います。これにより、ディレクトリ内にあるがすべてのアセンブリが同じ dll の正しい数を含む IEnumerable が得られます。

たとえば、ディレクトリに fakeplugin1.dll と fakeplugin2.dll という 2 つのアセンブリがあります。FakePlugin1 および FakePlugin2 クラスをエクスポートします。今、container.ComposeParts() を呼び出すと、ImportMany で装飾されたリストには何もありません。container.Catalog にはディレクトリに 2 つのアセンブリが含まれていますが、どちらも FakePlugin1 です。

コードは次のとおりです。

ExportFactory と RegistrationBuilder を使用しようとしていますが、基本機能でさえ期待どおりに機能しないことに気付きました。

私は何を間違っていますか?MEF2 で何か変更がありましたか? 2 つの異なるアセンブリを読み込む方法は? :)

事前にご協力いただきありがとうございます。

編集: フォルダー内に最初のタイプの2つのインスタンスを常に作成します(abcで昇順)。フォルダーに別のものを入れると、同じものが3つ作成されます。

編集: MEF2 で同じ結果が得られるコードをペーストビンにアップロードしました: http://pastebin.com/3fWcujPS

0 投票する
2 に答える
1014 参照

c# - MEF 2 でクローズド タイプを使用してオープン ジェネリック タイプを構成する

MEF 2 以降、MEF はオープン ジェネリック型のクローズ型への合成をサポートしていることを理解しています。同じ合成コンテナーに追加された 2 つの異なるアセンブリからエクスポートされた型から閉じた型を合成しようとしていますが、ImportCardinalityMismatchException を受け取ります。私の管理下にないため、アセンブリの 1 つに規則を使用しています。もう一方については、属性を使用しました。

ジェネリックに関する用語がかなり混乱しているため、質問の言い方が正確にはわかりませんが、独自のクラスを明示的に実装せずに、Foo から継承し、FooUser 型パラメーターを提供することなく、新しい閉じた型を作成しようとしています。これが私がこれを行っている方法の問題なのか、それとも型が異なるアセンブリにあるという事実と関係があるのか​​ どうかはわかりません。

あるアセンブリには、次のものがあります。

別のアセンブリには、次のものがあります。

私の登録コードでは、次のことを行いました。

後で、次のように値をエクスポートしようとします。

Exception:Thrown: "制約に一致するエクスポートが見つかりませんでした: ContractName Foo(Bar2) RequiredTypeIdentity Foo(Bar2)" (System.ComponentModel.Composition.ImportCardinalityMismatchException) System.ComponentModel.Composition.ImportCardinalityMismatchException がスローされました: "エクスポートが見つかりませんでした制約に一致するもの: ContractName Foo(Bar2) RequiredTypeIdentity Foo(Bar2)"

コンベンション インスタンスを調べたところ、コンテナには Foo{0}、Bar2、Something などのパーツがあります。ただし、まだ System.ComponentModel.Composition.ImportCardinalityMismatchException を受け取ります。

IRepository はあるが、より具体的なものがある場合やアセンブリにまたがるアイテムがない場合など、より抽象的なケースでこれが行われるのを見てきました。どんな援助でも大歓迎です。役に立つものがない限り、おそらく問題のある型から継承して、それで終わります。

編集:実際のプロジェクトで実際にここにいるのとは異なることをしている可能性がなく、上記の非常に単純化された例を作成したところ、さまざまな同様の結果が得られました。単純化した例に合わせて、いくつかの型の名前を変更しました。

構成で 1 つの構成エラーが発生しました。根本的な原因を以下に示します。詳細については、CompositionException.Errors プロパティを確認してください。

1) 制約に一致するエクスポートが見つかりませんでした: ContractName CompositionTestLibrary.Foo(CompositionTestLibrary2.Bar2) RequiredTypeIdentity CompositionTestLibrary.Foo(CompositionTestLibrary2.Bar2)

結果: パーツ 'CompositionTest.Something' に import 'CompositionTest.Something..ctor (Parameter="foo", ContractName="CompositionTestLibrary.Foo(CompositionTestLibrary2.Bar2)")' を設定できません。要素: CompositionTest.Something..ctor (Parameter="foo", ContractName="CompositionTestLibrary.Foo(CompositionTestLibrary2.Bar2)") --> CompositionTest.Something --> AssemblyCatalog (Assembly="CompositionTest, Version=1.0.0.0, Culture=neutral、PublicKeyToken=null")

結果: エクスポート 'CompositionTest.Something (ContractName="CompositionTest.Something")' をパーツ 'CompositionTest.Something' から取得できません。要素: CompositionTest.Something (ContractName="CompositionTest.Something") --> CompositionTest.Something --> AssemblyCatalog (Assembly="CompositionTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")

0 投票する
0 に答える
405 参照

mef2 - MEF2: 明示的にエクスポートしない限り、インポートが見つかりません

MEF2 属性なし/慣習ベースの登録をアプリで機能させようとしています。私が見ているのは、[Export]属性を省略すると、ComposeParts呼び出しもGetExports呼び出しもアイテムにならないということです。

クラスに属性を追加する[Export(typeof(IGuiModule))]と、問題なく取得されますが、(妥当な) 警告が表示されます。

「タイプ 'Core.Models.DeviceListView' に適用されるエクスポート仕様規則は、ソース ファイルに適用された属性または以前の規則によってオーバーライドされました。」

ここで何かを見逃しましたか、それとも間違った期待を持っていますか? MEF2 アプローチを使用すると、明示的なエクスポート属性を必要とせずにインポートできると思いますか?

私が見つけた情報は少し混ざり合って断片化されており、さまざまな情報源が異なる情報を示しています (MEF が進化したためだと思います)。

エクスポートされたクラス:

0 投票する
1 に答える
344 参照

mef2 - MEF 2 - RegistrationBuilder の場所

私は今晩完全に混乱しています。MEF 2 で RegistrationBuilder を使用してコンポジション コンテキストを構築する方法について、ほぼ 12 の投稿を読みました。ただし、WinRT アプリケーションをビルドするためにダウンロードした MEF 2 には、そのようなクラスはありません。MEF 2 を取り巻くオンライン ディスカッションと、MEF 2 の最新コピーで作業している実際のクラスとの間になぜこのような違いがあるのか​​ を説明する簡単なロードマップを教えてください。また、このライブラリのヘルプの URL も非常に役立ちます。