我有一個asp.net應用程序使用模型程序集(具有Model類)用於業務邏輯。此模型程序集通過IMailService接口具有對MailService的依賴關係,我試圖使用MEF來填充MailService實現的模型需求。我正在做Model類的構造器中的MEF組合。Mef和asp.net問題
這個想法背後是創建一個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中設置完全信任,但仍然沒有運氣
構圖保持不變。 更改因以下錯誤 而被拒絕:組合錯誤 產生了單個組合錯誤。 根本原因如下。 查看CompositionException.Errors 屬性獲取更詳細的 信息。
1)否出口中發現的匹配 約束 「((exportDefinition.ContractName = 「ExtensionInterfaces.IMailService」)& & (exportDefinition.Metadata.ContainsKey( 「ExportTypeIdentity」) & & 「ExtensionInterfaces .IMailService」 .Equals(exportDefinition.Metadata.get_Item( 「ExportTypeIdentity」))))」。
,導致:無法設置進口 Model.Model._mailService '在零件上Model.Model '(ContractName = 「ExtensionInterfaces.IMailService」)。元素: Model.Model._mailService (ContractName = 「ExtensionInterfaces.IMailService」) - > Model.Model
我懷疑這一點,我給每個人完全訪問該文件夾,將網站設置爲完全信任。我甚至移動了網站內的插件文件夾,但仍然沒有運氣。 – terjetyl 2009-08-24 07:12:53
另外單元測試調用spesific代碼工作正常,所以它是使用asp時發生的問題。作爲客戶端的網站 – terjetyl 2009-08-24 07:19:56