2012-01-16 35 views
1

MEFに部品を取り付けるのは簡単です。MEF輸入品に「サービス」を公開

[ImportMany(typeof(IModule))] 
public List<IModule> Modules {get; set;} 

しかし、シェルアプリケーションは、一部のサービスをパートに提供できる必要があります。

例えばシェルアプリケーションは、datalayerにアクセスすることが認証および承認について知っている、等...

は簡単な解決策はあります。 (おそらくこれは本当に簡単ですか?)ベストプラクティス?

答えて

2

これらのサービスをエクスポートしないのはなぜですか?

[Export(typeof(IMyService))] 
public class MyService : IMyService 
{ 
    ... 
} 

サービスがシェルにバインドされていて、シェルがそれを構成する場合は、シェルプロパティとしてエクスポートできます。そして、各部分がそれらをインポートして使用することができます

public class Shell : Window 
{ 
    [Export] 
    public IMyService MyService 
    { 
     get 
     { 
      MyService service = new MyService(); 

      // initialize service 

      return service; 
     } 
    } 
} 

:その場合、あなたはMyServiceクラスからエクスポート属性を削除し、これを持っている必要があります。

[ModuleExport(typeof(MyModule))] 
public class MyModule : IModule 
{ 
    [Import] 
    public IMyService MyService { get; set; } 
} 

このようにして、サービスはインポート時にシェルによって設定されます。

+0

だから、これらを私のシェルにインポートし、そこに設定し、部品にインポートして、そこに使用しますか?誰が注文の世話をしますか? (もちろん、シェルのハードリファレンスはできませんが、それは実行可能です) – TimothyP

+0

または、シェルはIDataServiceなどのインスタンスを作成し、それをインポートする部分にエクスポートできますか? – TimothyP

+0

@TimothyP私の更新された回答を参照してください –