J'ai une classe avec un constructeur qui ressemble à ce qui suit:
BatchService batchService = DIContainer.Resolve<BatchService>()
3 Réponses :
Vous pouvez utiliser paramètreoverride code>:
S'il vous plaît ne pas Abuse Unity comme ServiceLocator . p>
Si vous souhaitez créer des objets qui nécessitent des paramètres d'exécution, utilisez une usine. Vous pouvez même laisser tomber l'acte de mettre en œuvre cette usine en utilisant la version Unity de usines dactylographiées ou Laissez l'unité générer des délégués d'usine pour vous. P>
C'est le seul commentaire qui guide dans la bonne utilisation plutôt que de simplement répondre à la question de l'OP
Bonne réponse. L'article lié nécessite-t-il une bibliothèque tierce partie appelée «Tecx»? Il est difficile de savoir si le code y travaille hors de la boîte avec l'unité ou non.
@JOSHNOE TYPEDFactories code> ne fait pas partie de l'unité. Tecx n'est pas vraiment une bibliothèque mais un assortiment de solutions à divers problèmes qui sont venus à un moment donné. Mais c'est le système d'exploitation pour que vous puissiez saisir une partie du code l'utiliser comme vous le souhaitez.
@Sebastianweber serait reconnaissant si vous pouviez expliquer comment vous feriez cela avec une usine manuellement, sans utiliser des usines dactylographiées ni des délégués d'usine. J'essaie de faire une chose similaire moi-même mais je pense que je suis légèrement hors de piste Stackoverflow.com/Questions/28073920/...
Cette réponse aborde le sujet tangentiel de cette question et manque le problème réel.
Tout d'abord, ce n'est pas une bonne idée Mix Utiliser Ilogger code> avec la logique d'entreprise. Vous pouvez créer un iLogger directement dans
Batchservice CODE> ou Resolvez thru
[Dépendance] code> attribut. DI Ce n'est pas panacée, la création d'objets commerciaux ne devrait pas dépendre de
ilogger code> p>
Nouveau injectionParameter