問題タブ [mef]

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 投票する
1 に答える
2325 参照

.net - .NET 3.5 をターゲットとする MEF パーツと .NET 4.0 をターゲットとするアプリケーションの混合

Managed Extensibility Frameworkは、スタンドアロン プロジェクト (現在は .NET 3.5 を対象) であり、.NET 4.0 フレームワークの一部でもあります。

MEF パーツを含む .NET 3.5 をターゲットとするアセンブリを作成するとします。これらのアセンブリは、スタンドアロン バージョンの を参照しSystem.ComponentModel.Composition.dllます。

ここで、.NET 4.0 をターゲットとする MEF 対応アプリケーションを作成するとします。このアプリケーションはSystem.ComponentModel.Composition.dll、.NET 4.0 フレームワークに付属する を参照します。このアプリケーションで前述の MEF パーツを使用できますか?

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

c# - 複数の MEF パーツを読み込めません

同じインターフェイス タイプの複数の MEF パーツをロードしている Winforms デスクトップ アプリケーションがあります。

問題: 同じタイプのものを複数ロードしようとすると、次の例外が発生します。

構成は相変わらず。次のエラーのため、変更は拒否されました: 構成で 1 つの構成エラーが発生しました。根本的な原因を以下に示します。詳細については、CompositionException.Errors プロパティを確認してください。

1) 制約 '((exportDefinition.ContractName = "BOCA.TaskPilot.Common.Extensions.IFolderViewExtension") && (exportDefinition.Metadata.ContainsKey("ExportTypeIdentity") && "BOCA.TaskPilot.Common. Extensions.IFolderViewExtension".Equals(exportDefinition.Metadata.get_Item("ExportTypeIdentity"))))'、無効なエクスポートが拒否された可能性があります。

結果: 一部 'TaskPilot.Windows.MainForm' でインポート 'TaskPilot.Windows.MainForm.FolderViewExtension (ContractName="BOCA.TaskPilot.Common.Extensions.IFolderViewExtension")' を設定できません。要素: TaskPilot.Windows.MainForm.FolderViewExtension (ContractName="BOCA.TaskPilot.Common.Extensions.IFolderViewExtension") --> TaskPilot.Windows.MainForm

パーツをロードするコードは次のとおりです。

各 MEF パーツのクラスのコードは次のとおりです。

メインフォームで使用されるインポートは次のとおりです。

最後の Catalog.Catalogs.Add 行のコメントを外すと、例外がスローされます。それなしで実行すると、問題なく実行されます。その行は、IFolderItemsViewExtension インターフェイスを実装する別のユーザー コントロールを読み込みます。ユーザーコントロールとそのインターフェイスだけのダミープロジェクトをロードしようとしましたが、それでも同じ例外が発生します。私が何をしても、この例外が発生します。

同じタイプの MEF パーツ エクスポートを複数ロードしていない限り、すべて正常に動作しているようです。

これは、MEF ダウンロードからの System.ComponentModel.Comsistion の 2009.22.10.0 の最新バージョンを使用しています。

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

c# - MEFまたはプロバイダーモデル?

現在MEFを使用してコンソールアプリケーションの拡張機能をインポートしているプロジェクトに取り組んでいます。私は、ユーザーのニーズに合わせて構成できる、コンソールベースの出力以上のものをアプリケーションに提供する機能を検討しています。

この時点で、出力機能に拡張性を提供するためにどちらに進むべきか疑問に思っています。以前は、カスタムプロバイダーモデルを使用して、App.configファイルを介して拡張機能を構成できるようにしました。

同様の方法でMEFのパーツを選択的に管理する簡単な方法はありますか、それともプロジェクトに2つの異なる拡張性パターンを使用する必要があります(つまり、コア拡張機能用のMEFインポートと、出力管理の側面用の.netカスタムプロバイダーモデル)。 ?

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

c# - Entity Framework に問題がある

ProfilePropertyを使用してProfilePropertiesテーブルに を追加しようとしていますObjectContext.AddObject

テーブルのdbフィールドは次のProfilePropertiesとおりです。

テーブルのdbフィールドは次のProfilePropertyDefinitionsとおりです。

渡されるオブジェクトの変数は次のProfilePropertyとおりです。

ProfilePropertyDefinitionIDとはUserIDどちらも外部キーであるため、オブジェクトを作成した後、とをテーブルからProfileProperty選択して、 に関連オブジェクトを入力します。UserProfilePropertyDefinitionProfileProperty

次に、AddObjectこれらの変数を含むオブジェクトを渡そうとすると、エラーが発生します。

InnerException = {"値 NULL を列 'PropertyName'、テーブル 'mydbserver.dbo.ProfilePropertyDefinitions' に挿入できません。列は NULL を許可しません。INSERT は失敗します。\r\nステートメントは終了しました。"}

渡したオブジェクトが何を保持しているかを確認するために休憩を取りました。これには次のものがあります。

質問

  1. PropertyNameそこにあるのに null だと言っているのはなぜですか?
  2. そもそもProfilePropertyDefinitionオブジェクトをテーブルに追加しようとしているのはなぜですか? ProfilePropertyDefinitions(関連オブジェクトを追加または更新したくない)

サービス層AddProfile()

リポジトリAdd():

0 投票する
3 に答える
624 参照

.net - MEFでエクスポートとして属性付けされていない場合に、レガシーオブジェクトをインポートする

MEFを使用してプラグインベースのアプリケーションを構築し始めており、ゆっくりとMEFをミックスに追加しています。MEF DNAをまだ持っていない既存のコードはたくさんありますが、それでも、合成によって自動的に作成される新しいオブジェクトにそのコードを取り込みたいと思います。

これを具体的にしましょう。

IFooインターフェイスを実装し、特定の便利な方法でアプリケーションモデルを操作するオブジェクトのリストがあります。

IFooXここで、インターフェイスをメニューコマンドやボタンクリックなどのさまざまなユーザーアクションに マップする便利なツールをいくつか作成したいと思います。

これが私がやりたいことです:

CoolToolがインスタンス化され、レガシーFooCoolオブジェクトが渡されます。次に、エクスポートされた関数を取得して、メニューに適切に表示します。ユーザーがメニュー項目をクリックすると、新しいものCoolToolはインターフェースの既存の機能を使用してIFooCool、何か、まあ、クールなことをします。

もちろん、それは機能しません。レガシーオブジェクトはエクスポートとして関連付けられていないため、コンポジションバッチに追加しても効果はありません。batch.AddPart(object)上記のコードでは、.の代わりにfooインスタンスをバッチに追加していますbatch.AddPart(ComposablePart)。最初のメソッドは、属性付きモデルを使用して、オブジェクトから構成可能な情報を検出します。

2番目のオーバーロードをどのように使用できますか?既存の非MEFオブジェクトをその場でComposablePartにラップできますか?何かのようなもの:

ところで、私は非Silverlightアプリでプレビュー8を使用しています。

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

mef - 部品をインポートしないMEF貢献プロバイダーモデル

MEF Contrib(リンク)からのMEFのインポートとエクスポートを処理するために、構成可能なプロバイダーモデルを使用しようとしています。CodeplexのドキュメントとCodeJunkieのブログ投稿(リンク)を読みました。ただし、パーツを作成するためのコンテナを取得できないようです。どこが間違っているのですか?

Program.cs

TestCommand.cs

App.Configセクション:

ビルドエラーは発生せず、MEFコアの一部である(適切なカタログも含む)一般的な属性ベースのシステムに切り替えると正常に動作します。上記の例では、Program.Commandsは常にNULLです。コレクションの代わりに単一のプロパティを使用して、同じ結果を得ようとしました。

デバッグすると、provider.Partsコレクションを取得できるため、構成情報に正しくアクセスしていることがわかります。ただし、デバッグしてcatalog.Partsにドリルインしようとすると、InvalidOperationExceptionが発生します。

私がここでどこが間違っているのか、誰か経験がありますか?

0 投票する
7 に答える
22374 参照

c# - MEF についてどこで学べますか?

Glenn Block の DNR TV エピソードを見ましたが、MEF が私の会社に役立つようです。その長所と短所、およびそれを使用するいくつかのサンプル プロジェクトに関する詳細情報を見つけようとしています。MEF の使用に関する適切なブログ/チュートリアルはありますか?

注: 私は C# を使用しているので、例が C# である場合、それは素晴らしいことです。

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

asp.net-mvc - Asp.net MVC - プロジェクト間で使用される柔軟なモジュールを実現する方法は?

私はコードを直接探しているわけではありませんが、私の問題を最もよく解決する方法についていくつかのアイデアを探しています。

私が取り組んでいるこのasp.net mvcアプリケーションがあります。それは「高度にモジュール化」されるべきであり、多くの部品は異なるプロジェクト間で再利用されなければなりません。

現在のアプローチでは、Managed Extensibility Framework を使用して実行時にアセンブリをインポートしています。これらは通常、作業に必要なすべてのもので構成されています。モデル、ビュー、コントローラー。ルートとナビゲーション/メインメニューボタンは、インポート時に登録されます。これは今のところ機能します。たとえば、「ニュース コラム」アセンブリを他のプロジェクトに単純にコピーし、MEF を含めると、「魔法のように」新しいプロジェクトが /News/List でアクセス可能なニュース機能を提供します。

ただし、問題は、ほとんどの場合、アセンブリ内で提供される既定のビューが適合する一方で、インポートされたコントローラーを別のビューで表示して、他のフィールドをカスタム レイアウトで表示したい場合があることです。私の現在のアプローチは、モジュール内のアクション メソッドを仮想化することです。別のプロジェクトでカスタム ビューを使用してリストをレンダリングする必要がある場合は、リスト メソッドをオーバーライドし、基本メソッドを呼び出して ViewData を埋めてから、必要なビューを呼び出すだけです。しかし、これはどういうわけか汚れているように感じます。誰かがより良い解決策を知っていれば、本当に感謝しています。

私が直面しているもう 1 つの問題は、インポートしたモデルを別のテーブルで動作させたいということです。ターゲット テーブルが ClassMap 内で定義されている Fluent NHibernate を使用します - Table("News")。マッピングは次のようにインポートされます。

インポートされたマッピングのテーブルを変更する方法がわかりませんでしたが、簡単な方法があると思いますか?

少なくともこれを読んでくれてありがとう:)

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

.net-3.5 - System.Actionを使用したラムダ式の例MEFの場合は?

System.Action<T>とLambda式は初めてです。これが私が使いたい1つのケースです。

基本的に、メソッドInitialize(Action <CompositionBatch> action)は、MEFカタログパーツをCompositionBatchインスタンスに初期化するために使用されます。これにより、すべてのインポートパーツとエクスポートパーツが追加されます。その後、すべてのDIマッピングを解決するために、バッチがコンテナーに構成されます。

ここでSystem.Action<T>とLambda式を正しく使用しているかどうかはわかりません。この例では、xはComposition()CTORによってオンフライで作成されますか?Initialize()メソッドに何かを入れる必要がありますか?または、代わりにInitialize()としてデリゲートを作成する必要がありますか(そうであれば、それをメソッドにバインドする必要があると思います)?