48 votes

NInject: Où gardez-vous votre référence au noyau?

Je suis en utilisant NInject sur une nouvelle application web et il y a deux choses qui ne sont pas claires pour moi:

  1. N'ai-je pas besoin de garder une référence vers le Noyau autour (Session/App variable) pour s'assurer que GC n'a pas à recueillir toutes mes instances? Par exemple, si je spécifie .À l'aide de() et le Noyau de l'objet devient recueillies, ne sont pas tous mes "singletons" collectés?

  2. Si j'ai besoin de conserver une référence à un objet du Noyau autour de nous, comment puis-je autoriser les arguments passés à WithArguments() pour modifier ou n'est-ce pas possible.

29voto

Nate Kohari Points 1748

Il est vrai que vous ne voulez pas passer à travers le noyau. Généralement, dans une application web, je stocke le noyau dans une propriété statique dans le HttpApplication. Si vous avez besoin d'une référence pour le noyau, vous pouvez simplement exposer une dépendance (via argument du constructeur ou de propriété) qui est du type IKernel, et Ninject va vous donner une référence pour le noyau qui a activé le type.

Si vous utilisez WithArguments() sur une liaison, ils seront utilisés pour toutes les activations. Si vous utilisez IParameters, elles ne seront utilisées que pour cette activation. (Toutefois, si le service que vous êtes en activant a un comportement réutilisables comme Singleton, il ne sera pas ré-activé même si vous passer les différents IParameters.)

16voto

Mauricio Scheffer Points 70470

C'est un piège courant lorsque vous commencez à utiliser un conteneur IoC. Voir cette question.

En un mot:

  • C'est une mauvaise pratique de passer votre conteneur autour (été là, fait cela, et ça fait vraiment mal)
  • Si vous avez vraiment besoin de invocate directement le conteneur, d'abord considérer l'abstraction à l'injection d'une usine, puis, comme une dernière ressource envisager d'utiliser une passerelle statique pour le conteneur

-4voto

satish Points 490

Marque Seeman-auteur de Manning Injection de Dépendance Suggust à Utiliser Hollywood principe Ne nous appelez pas(CIO cadre) au contraire, On va vous appeler ... .. Le conteneur IOC doivent être placés dans l'Application de la Composition de la racine.. et il doit instancié comme demandé.. comme le wat nate mentionné

.. Pour l'Application Web de la Composition de la racine est Mondiale.asax fichier, où u peut utiliser le remplacent les événements de démarrage et Il u peut se lier votre Ninject pour résoudre le composant

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