2010-08-26 6 views
8

Je me suis inscrit un composantAutorise l'injection de propriété facultative (nulle) dans Castle Windsor par la méthode d'usine?

container.Register(Component.For<XType>() 
.LifeStyle.Is(LifestyleType.Transient) 
.UsingFactoryMethod(SomeMethod)); 

et je utilise actuellement ce pour l'injection de propriété sur mes contrôleurs ASP.NET MVC. Cependant - mon problème actuel est que SomeMethod peut retourner null parfois. Castle n'est pas très content de cela et se plaint d'une instance nulle.

Existe-t-il une manière élégante de configurer Windsor pour permettre à ce composant d'être nul? J'ai exploré les docs mais n'ai pas trouvé un moyen de le faire.

Merci.

+0

Vos clients gèrent-ils les références de composants null? Vous pouvez mettre du code null-handling dans une implémentation par défaut et le créer au lieu de renvoyer une valeur nulle. – onof

+0

J'utilise le modèle NullObject comme solution temporaire. Une autre option pourrait être de l'encapsuler dans un autre composant qui ne renverrait que la valeur null/non-null - mais il semble plutôt maladroit. – RasmusKL

+0

voir ma réponse mise à jour. –

Répondre

6

Non, il n'y a aucun moyen de passer null via Windsor.

Si le composant est nul, qu'il ne peut évidemment pas être utilisé, il serait inutile de le faire de toute façon.

Si vous utilisez ce composant uniquement en tant que propriété sur un autre composant, je pense qu'il serait préférable de simplement le transmettre en tant que DynamicParameter. Windsor l'ignorera alors si c'est nul.

+3

Il s'agit d'une dépendance transitoire qui est parfois nulle - généralement, elle a une valeur significative - la méthode usine est appelée pour chaque requête. Je ne vois pas comment cela est totalement inutile. – RasmusKL

+3

Je suis d'accord qu'il serait utile d'autoriser les valeurs nulles. Ce serait un bon moyen d'inverser des objets statiques, par ex. dans WCF, 'ServiceSecurityContext.Current'. Cependant, cela peut bien sûr être nul si l'utilisateur n'est pas authentifié. Un modèle d'objet nul est le meilleur moyen de contourner. –