2011-11-03 3 views
3

J'ai hérité du code avec un conteneur DI personnalisé (qui doit être déplacé vers l'unité) qui est basé sur un attribut comme MEF par exemple.Extension Unity

[SERVICE] 
PUBLIC <interface> myVar { get; set ; } 

se demander s'il y a déjà une extension de l'unité que je pourrais utiliser ou peut-être une aide sur la construction d'un?

+0

[SERVICE] Comme dans le service d'injection. –

Répondre

2

Il n'est pas clair quel comportement est supposé activer [SERVICE]. Je vais donc deviner:

Unity Outity prend en charge Injection Attributes pour différentes formes d'injection de dépendance. Vous pouvez également faire Attribute-Driven Policies pour l'interception de méthode.

Si vous avez la possibilité de modifier la manière dont l'injection est effectuée: Le modèle préféré consiste à utiliser l'injection du constructeur au lieu des attributs ou du localisateur de service. Cela vous permet de supprimer toutes les références à Unity de vos classes ... ce qui signifie que vous pouvez changer de conteneur sans modification de code. Voir Service Locator is an Anti-Pattern.

1

Si SERVICEAttribute marque une propriété pour être injectée par le conteneur, remplacez seulement la base de code entière par [SERVICE] pour [Dependency].

Le DependencyAttribute est le moyen par lequel Unity marque les propriétés pour l'injection de dépendances. Je suis d'accord avec ErnieL cependant que l'utilisation d'attributs est une odeur de code au pays de l'injection de dépendance. Utilisez l'attribut afin de permettre le déplacement du code vers Unity, mais n'utilisez pas [Dependency] pour tout nouveau code que vous écrivez et supprimez-le lorsque vous refactorisez du code ancien.