36 votes

Quand utiliseriez-vous le Common Service Locator?

J'ai regardé le Common Service Locator comme un moyen d'abstraire mon conteneur IoC mais j'ai remarqué que certaines personnes sont fortement contre ce type de cela.

Les gens recommandent-ils de ne jamais l'utiliser? Vous l'utilisez toujours? ou parfois l'utiliser? Si parfois, dans quelles situations l'utiliseriez-vous et dans quelles situations ne l'utiliseriez-vous pas?

32voto

Ian Ringrose Points 19115

Imaginez que vous écrivez le code de bibliothèque pour être utilisé par le 3e partie les développeurs. Votre code doit être en mesure de créer des objets de service que ces développeurs de fournir. Cependant vous ne savez pas quel conteneur IoC chacun de vos appelants à l'aide.

Le Service Commun Locator vous permet de faire face à la ci-dessus sans forcer un Cio sur vos utilisateurs.

Au sein de votre bibliothèque elle-même, vous pouvez enregistrer vos propres classes dans les Cio, maintenant, il devient beaucoup plus difficile lorsque vous devez choisir un Cio pour votre propre usage, qui ne sera pas obtenir de la manière de vos interlocuteurs.

19voto

Steven Points 56939

J'ai remarqué que l'un des arguments contre l'utilisation de la CSL est un faux, parce que les développeurs pense que cette bibliothèque n'est capable de faire le Service Locator modèle. Ce n'est cependant pas le cas, car il est facile à utiliser avec l'Injection de Dépendance modèle.

Cependant, le CSL de la bibliothèque a été spécialement conçu pour cadre les concepteurs qui ont besoin d'permet aux utilisateurs d'enregistrer les dépendances. Parce que la bibliothèque sera l'appel de la CSL directement, à partir du cadre de la perspective, nous parlons de la SL modèle, d'où son nom.

Comme un framework designer toutefois, en prenant une dépendance sur la CSL ne devrait pas être prise à la légère. Pour la facilité d'utilisation de votre cadre, il est généralement beaucoup mieux d'avoir votre propre DI mécanisme. Un très mécanisme commun est de mettre en place des dépendances dans le fichier de configuration. Ce modèle est utilisé tout au long de l'ensemble .NET framework. Presque toutes les dépendances peut être remplacé par un autre. L' .NET fournisseur de modèle est construit sur cette.

Lorsque vous, en tant que cadre de designer, prendre une dépendance sur la CSL, il sera plus difficile pour les utilisateurs à utiliser votre application. Les utilisateurs doivent configurer un conteneur IoC et de le raccorder à la CSL. Cependant, il n'est pas possible pour le cadre pour valider la configuration peut être faite à l'aide de l' .NET de configuration système, qui, comme tous les types de charge de la validation en elle.

9voto

Grant Palin Points 3459

J'ai fait un peu de lecture sur le service locator concept dernièrement. C'est une façon d'aider à réduire le couplage, mais nécessite le code de couplage sur le localisateur pas le contenant la sauvegarde de la localisation, mais la recherche elle-même. C'est un compromis, mais peut être bénéfique dans la bonne situation.

Une situation où il peut s'avérer très utile lorsque vous disposez d'un code qui n'utilise pas de DI, tels que le code existant - je suis dans un bateau maintenant. Tirant dans les objets requis par SL, plutôt que de créer directement entre eux, permet l'ajout d'un peu d'abstraction. Je vois cela comme une étape intermédiaire entre SL et DI/Cio.

0voto

Abhijeet Patel Points 2116

Si vous avez de la bibliothèque de code qui est dans le besoin de services et ce code peut être hébergé dans le contexte d'un cadre plus large/runtime puis le cadre / moteur d'exécution devra prévoir un mécanisme où vous pouvez exécuter du code personnalisé au démarrage où vous pouvez initialiser votre conteneur et d'enregistrer les dépendances. Un bon exemple de cas où CSL peut être problématique, c'est lorsque vous l'utilisez dans le cadre de MSCRM. Vous pouvez avoir de la logique métier personnalisée exécutée par l'enregistrement des plugins qui le MSCRM cadre exécute sur certains événements. Le problème est où voulez-vous exécuter l'enregistrement logique puisqu'il n'y a pas de "démarrage" de l'événement que vous pouvez vous abonner pour la configuration de votre conteneur d'injection de dépendances. Même si vous pourrait en quelque sorte de l'installation de votre DI vous auriez besoin de mettre de l'ASC et de la DI de bibliothèques dans le GAC, puisque c'est la seule façon de faire appel à la 3e partie du code à partir d'un plugin (un élément de plus à ajouter à votre déploiement liste de contrôle). Dans les scénarios comme cela, vous êtes mieux d'avoir vos dépendances comme les paramètres du constructeur que le code appelant peut initialiser comme il l'entend( soit à l'aide du constructeur d'injection ou manuellement "newing" l'interface appropriée de mise en œuvre).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X