ビジネス ロジック用のモデル アセンブリ (Model クラスを含む) を使用する asp.net アプリケーションがあります。このモデル アセンブリは、IMailService インターフェイスを介して MailService に依存しており、MEF を使用して MailService 実装のモデルのニーズを満たすことを試みています。Model クラスのコンストラクターで MEF 合成を行っています。
この背後にあるアイデアは、サイト自体がメールの送信方法を知る必要なく、Web サイト間で再利用できる MailService アセンブリを作成することです。IoC コンテナーの方が適しているかもしれませんが、MEF アプローチの方が理解しやすく、パーツを組み合わせてアプリを構成するというアイデアが気に入っています。また、IoC コンテナーと比較した場合、mef アプローチにはマイナス面がありますか?
[Import]
private IMailService _mailService;
public Model()
{
Compose();
}
private void Compose()
{
DirectoryCatalog cat = new DirectoryCatalog(Settings.Default.PluginsFolder);
var container = new CompositionContainer(cat);
container.ComposeParts(this);
}
以下のコードは別のアセンブリにあり、インターフェイスはさらに別のアセンブリにあります
[Export(typeof(IMailService))]
public class MailService : IMailService
{
}
これは、モデル アセンブリの単体テストでは問題なく動作しますが、asp.net サイトからモデル アセンブリを使用すると、以下の例外で失敗します。また、web.configで信頼を完全に設定しようとしましたが、まだ運がありません
構成は相変わらず。次のエラーのため、変更は拒否されました: 構成で 1 つの構成エラーが発生しました。根本的な原因を以下に示します。詳細については、CompositionException.Errors プロパティを確認してください。
1) 制約に一致するエクスポートが見つかりませんでした"ExportTypeIdentity"))))'.
結果: Model.Model' の一部に import Model.Model._mailService (ContractName="ExtensionInterfaces.IMailService")' を設定できません。要素: Model.Model._mailService (ContractName="ExtensionInterfaces.IMailService") --> Model.Model