1

こんにちは私は、aritcle Simplified MEFを使用して単純なメインアプリケーションと2つのInjectedApplications(InjectedApplication1とInjectedApplication2)を作成しました:Silverlight.xapを動的にロードします。

次に、メインアプリケーションからインジェクトアプリケーションに値を渡す方法を教えてください。

シナリオは次のとおりです。メインアプリケーションで、オンデマンドでxapを注入します。ここまでは、上記の記事で述べたようにすべてが正常に機能します。私はそこからいくつかのことを拡張する必要があります:

xap(注入されたもの)には、特定のIDの値をロードするためのコードが含まれている必要があります。したがって、このxapをメインアプリケーション(注入されたxapがロードされる場所)にロードするときに、値(いくつかのID)を注入されたXAPに渡して、xapがその特定のIDの情報をロードするようにします。

どうすればこれを達成できますか?

4

1 に答える 1

2

Export注入されたアプリケーションのタイプに属性が必要です。これらの属性で、インターフェースを定義できます。エクスポートされたタイプに同じインターフェイスを実装させます。MEFを使用してオブジェクトを作成すると、エクスポートされたインターフェイスにアクセスできるようになります。これを使用して、構築されたオブジェクトにデータを渡すことができます。

別の共有ライブラリプロジェクトでインターフェイスを定義することをお勧めします。

それができない、またはしたくない場合は、MVVMLightメッセンジャーのようなイベントアグリゲーターを使用できます。メッセンジャーには静的Defaultプロパティがあります。2つのxapファイルが同じデフォルトメッセンジャーを共有すると確信しています。その後、その方法でデータを送受信できます。

共有ライブラリ

public interface IFoo
{
    object Data { get; set; }
}

注入されたアプリ

[Export(typeof(IFoo))]
public class Foo : IFoo
{
    public object Data { get; set; }
}

メインアプリ

public class Bar
{
    [Import]
    public IFoo MyFoo { get; set; }
}

これで、を呼び出すCompositionInitializer.SatisfyImports(this)Bar、InjectedAppからMyFooのインスタンスに設定されます。Fooこれは実装されているため、IFoo,このインターフェースを使用してクラスと対話することができますFoo

さらに説明が必要な場合は、コードを確認する必要があります。

于 2012-05-07T19:02:34.397 に答える