2012-01-25 5 views
2

私は、次のしている:MEFにこのインターフェイスに必要なタイプを教えてください。

public interface IEmailService 
    { 
     bool SendEmail(MailMessage message); 
    } 

[Export(typeof(IEmailService))] 
    public class SmtpEmailService : IEmailService 
    { 
} 


[Export(typeof(IEmailService))] 
    public class AmazonEmailService : IEmailService 
    { 
} 

私はいくつかの基準に基づいて特定のものをインポートするにはどうすればよいですか?私は、サービスを利用する場合

例えば、私はこのような何かを持っている:

public class MobileService 
    { 
     [Import] 
     public IEmailService EmailService { get; set; } 

はそれをインポートし、自動的にEmailServiceのどのバージョンを知っているので、設定ファイルやその他の場所でMEFを設定する方法はありますか?

+0

私はあなたがコレクション内のすべてを取得し、あなたの設定ファイルに基づいて必要なものを選ぶことができると思います。コード化するのに十分シンプルでなければなりません。 –

+1

ポイントは何ですか? MEFの目的は、アドインシナリオをサポートすることです。そのため、消費者は特定の依存関係を指示すべきではありません。 –

答えて

3

あなたはエクスポート中に、あなたのExport属性に契約の名前を指定して、以下のように、あなたのImport属性でエクスポート名のいずれかを使用することができます、あなたもImportManyを使用したい場合は

[Export("SmtpEmailService", typeof(IEmailService))] 
public class SmtpEmailService : IEmailService { 
} 

[Export("AmazonEmailService", typeof(IEmailService))] 
public class AmazonEmailService : IEmailService { 
} 

[Import("AmazonEmailService")] 
public IEmailService EmailService { get; set; } //Import a specific type 

セクションExports and Metadataを参照してくださいhttp://mef.codeplex.com

また、あなたに役立つSO questionもあります。

+0

ありがとう!私はそれが答えだと思います。私は 'web.config'でMEFがどのようなものをインポートすべきかを言うコードレス設定シナリオを期待していました。この方法で私はソリューションをホストする場所に基づいてそれを切り替えるでしょう。 – katit

+0

@katitはい私はいくつかの.configソリューションが存在すると信じていますが、現時点では私はそれについての知識と参考文献を持っていません。ちょっとグーグルにする必要があります..受け入れていただきありがとうございます.. – VS1

関連する問題