Différence entre les conteneurs MEF et IoC (comme Unity, Autofac, SMap, Ninject, Windsor.Spring.net, etc.)

j'ai cherché à propos de l'injection de dépendance et j'ai lu quelques articles. Mais je ne suis pas en mesure de faire la différence entre le MEF et les autres CIO. Ma question est donc la suivante: dans quelle situation devrais-je préférer utiliser un conteneur MEF ou IoC?

Pourquoi est-il bon d'utiliser MEF avec PRISM pour (WPF & Silverlight) ou pour des applications bureautiques?

alors que dans l'application Web les gens utilisent les conteneurs du CIO.

donc, ce qui est les critères pour décider quelle technique de dépendance je devrais utiliser?

j'ai parcouru l'article http://devlicio.us/blogs/casey/archive/2009/12/18/what-is-the-difference-between-an-ioc-container-and-mef.aspx , mais je n'ai rien pu déterminer.

41
demandé sur Peter Mortensen 2013-03-22 18:05:13

2 réponses

finalement, ce que j'ai conclu au sujet du conteneur MEF vs IoC est le suivant:

MEF est préféré pour être utilisé lorsque l'on doit traiter avec des types inconnus ou une architecture basée sur un plugin.

Il est préférable d'utiliser les conteneurs

de la COI avec des types connus.

de plus, MEF est une solution architecturale pour l'injection de dépendances

considérant que les conteneurs IoC sont des solutions au niveau du code pour la dépendance injection.

les conteneurs IoC ne sont que des techniques d'injection de dépendances qui peuplent l'instance d'une classe et si le constructeur de ces classes nécessite des objets d'autres classes, alors IoC injecte aussi les objets requis. Mais le MEF ne se limite pas à l'injection de dépendance. Bien que le MEF utilise également une approche basée sur la recherche des causes pour l'injection de dépendances, le MEF fait tellement d'autres choses en plus de l'injection de dépendances.

MEF a deux composants:

  1. catalogue: est responsable de la découverte de l'extension

  2. conteneur: offre la possibilité de charger une extension à une course application

MEF est plus que juste de l'injection de dépendances techniques. Il est utilisé lorsque nous avons besoin d'une architecture basée sur un plugin pour notre application, mais en même temps MEF utilise une approche basée sur le CIO pour la dépendance injection.

Je m'attends à ce que plus de gens commentent cela.

36
répondu Yogesh Joshi 2017-03-12 12:28:00

le Cio est l'architecture de la stratégie de conception, et de la MEF est une implémentation du modèle de conception de l'injection de dépendance. L'injection de dépendance (IOD) est souvent la stratégie de mise en œuvre du CIO. Souvent, le terme "conteneur CIO" est utilisé, ce qui donne à penser que la technique est le CIO.

Non, il en est autrement. La COI est un concept général et la DI est le modèle de conception pour mettre en œuvre le noyau de la COI. Le MEF est une forme de DI, mais il n'a pas toutes les caractéristiques fondamentales du CIO.

MEF utilise la composition pour trouver les dépendances qu'il doit résoudre. Cela ressemble beaucoup à beaucoup d'autres conteneurs du CIO, par exemple Pico et printemps . Mais cela s'arrête là. Je n'ai pas vu de gestion du cycle de vie ni de configuration de mise en commun. Les deux derniers font je considère comme une partie fondamentale de IoC (pas de DI), parce que la performance de l'appelant ne devrait pas souffrir en raison de la consommation de mémoire utilisée par la callee.

Le CIO principe est un service à l'appelant et à la personne appelée en les couplant librement. De cette façon, les deux fonctionnalités peuvent travailler optimisé. MEF pourrait avoir le problème qu'il y a des problèmes avec l'optimisation. Par exemple, lorsque vous avez un appel à partir du menu base de données, puis à un certain moment un appel à la base de données sera faite. Il est toujours préférable d'utiliser le regroupement pour que. MEF n'est pas capable de le faire.

le type de demande doit être indépendant du choix d'un dessin ou modèle. modèle. Il n'y a pas de grande différence entre un ordinateur de bureau ou une application web. Les deux sont des interfaces utilisateur et devraient pouvoir utiliser le MEF et le CIO. Si la fonctionnalité est simple et n'a pas besoin de franchir les limites d'optimisation (comme les appels de bases de données), alors MEF est le premier choix, car il s'agit d'un framework présent lors de L'utilisation de .NET 4. Alors il pourrait être utile, mais si un appel traverse une optimisation de la frontière (comme l'analyse ou le téléchargement d'un fichier), puis l'utilisation d'un Cio container est plus efficace pour la performance et l'entretien.

l'Information que j'ai utilisé:

24
répondu Loek Bergman 2017-05-23 10:30:02