Quand souhaitez-vous utiliser le Service Commun Locator?
J'ai été à la recherche à la Commune Localisateur De Service comme un moyen de l'abstraction de mon conteneur IoC, mais j'ai remarqué que certaines personnes sont fortement opposés à ce type de cette.
Ne recommandent de ne jamais l'utiliser? Toujours à l'aide? ou parfois à l'aide?
Si parfois, puis dans quelles situations vous l'utiliser et dans quelles situations vous pas l'utiliser.
- Vous êtes à la recherche pour les scénarios d'utilisation pour la Commune de Localisateur de Service en particulier ou plus généralement pour le service locator modèle? Les termes ne sont pas nécessairement interchangeables...
Vous devez vous connecter pour publier un commentaire.
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.
La Commune Service 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.
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.
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.
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).