J'ai une interface à résoudre et l'une des dépendances de l'objet mappé a une propriété que je voudrais définir avec une valeur que je n'ai disponible que lorsque je résous l'objet de niveau supérieur.Comment puis-je injecter une propriété uniquement si la valeur est non nulle à l'exécution avec Unity?
Il n'y a pas de valeur par défaut valide pour la propriété. Si elle n'est pas définie, elle doit être null et ne doit être définie que si la valeur que j'ai disponible au moment de la résolution n'est pas nulle.
Cette injection de propriété conditionnelle est-elle possible?
J'ai essayé ...
container.RegisterType<ProductInstanceValidatorBase, CartItemPurchaseTypeValidator>("CartItemPurchaseTypeValidator", new InjectionProperty("AccountEntity", null);
... mais il a dit que je ne pouvais pas utiliser une valeur nulle!
J'ai aussi essayé cela sur la volonté ...
container.Resolve<ProductInstanceValidatorBase>(new PropertyOverride("AccountEntity", value));
... mais cela jette une exception lorsque la valeur est nulle. Il est dit:
L'inférence de type de paramètre ne fonctionne pas pour les valeurs nulles. Indiquez explicitement le type de paramètre à l'aide d'une instance correctement configurée des classes InjectionParameter ou InjectionParameter. Nom du paramètre: parameterValue
Fondamentalement, je suis à la recherche d'enregistrer une propriété qui est uniquement définie avec une dérogation et seulement si la valeur de remplacement est non nul. Des idées? Sûrement d'un point de vue sémantique, l'injection de propriété devrait être être facultative.
Cheers, Ian.
Salut Igor, merci pour la réponse. J'ai évité le problème d'inférence de type en enveloppant la valeur de compte prioritaire avec un InjectionParameter typé et j'ai utilisé un objet nul qui pourrait être vérifié dans le setter. Je pense que vous avez raison d'avoir un problème avec la conception. L'objet de niveau supérieur prend réellement un tableau de ProductInstanceValidatorBase et seulement un type concret de ceux-ci a un paramètre de compte ainsi je suis venu à la conclusion qu'il s'agissait d'une abstraction qui fuit. Je peux essayer de mettre la référence de compte sur un sous-type de l'instance de produit en cours de validation. –
Si le constructeur d'une fabrique personnalisée (n'utilisant pas IoC) qui crée un tableau de ces validateurs nécessite une longue liste de dépendances pour satisfaire les dépendances de tous les différents validateurs dans le tableau résultant, comment arrêter le paramètre constructeur de l'usine liste d'être vraiment long? –