J'ai une application asp.net utilisant un assemblage de modèle (avec une classe Model) pour la logique métier. Cet assembly de modèle a une dépendance sur MailService via une interface IMailService et j'essaye d'utiliser MEF pour remplir les besoins de Model pour une implémentation MailService. Je fais la composition MEF dans le contructor de la classe Model.Problème Mef et asp.net
L'idée derrière ceci est de créer un ensemble MailService que je peux réutiliser entre mes sites Web sans que les sites eux-mêmes aient besoin de savoir comment le courrier est envoyé. Peut-être qu'un conteneur IoC serait un meilleur choix mais je pense juste que l'approche MEF est plus simple à comprendre et j'aime l'idée de composer mes applications en combinant des parties. Est-ce que l'approche mef a aussi des côtés négatifs si vous comparez avec un conteneur IoC?
[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);
}
Le code ci-dessous dans un autre assemblage et l'interface dans une autre assemblée
[Export(typeof(IMailService))]
public class MailService : IMailService
{
}
cela fonctionne très bien dans mes tests unitaires pour l'ensemble de modèle, mais quand je suis en utilisant l'ensemble de modèle à travers mon asp site .net échoue avec l'exception ci-dessous. J'ai également essayé de mettre la confiance à full dans web.config mais toujours pas de chance
La composition reste inchangée. Les modifications ont été rejetées en raison des erreurs de suivantes: La composition a produit une erreur de composition unique. La cause première est fournie ci-dessous. Consultez la propriété CompositionException.Errors pour obtenir des informations plus détaillées sur .
1) Aucune exportation n'a été trouvé qui correspondent à la contrainte « ((exportDefinition.ContractName = "ExtensionInterfaces.IMailService") & & (exportDefinition.Metadata.ContainsKey ("ExportTypeIdentity") & & « ExtensionInterfaces .IMailService ".Equals (exportDefinition.Metadata.get_Item (" ExportTypeIdentity ")))) '.
Entraînant: Impossible de définir l'importation Model.Model._mailService (ContractName = "ExtensionInterfaces.IMailService") ' sur une partie Model.Model'. Élément: Model.Model._mailService (ContractName = "ExtensionInterfaces.IMailService") -> Model.Model
Je me doutais que, aussi, j'ai donné à tout le monde un accès complet à ce dossier, mettre le site en toute confiance. J'ai même déplacé le dossier des plugins à l'intérieur du site mais toujours pas de chance. – terjetyl
De même, le test d'unité appelant ce code spécifique fonctionne correctement, c'est donc un problème qui se produit lors de l'utilisation d'un ASP.site net en tant que client – terjetyl