2010-08-26 10 views
8

Me he registrado un componente¿Permitir la inyección de propiedad opcional (nula) en Castle Windsor a través del método de fábrica?

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

y actualmente estoy usando esto por inyección propiedad en mis controladores de ASP.NET MVC. Sin embargo, mi problema actual es que SomeMethod puede devolver null algunas veces. Castle no está muy feliz con esto y se queja de una instancia nula.

¿Hay una forma ordenada de configurar Windsor para permitir que este componente sea nulo? He estado explorando los documentos pero no he encontrado la forma de hacerlo.

Gracias.

+0

¿Sus clientes manejan referencias de componentes nulos? Puede poner código de null-handling en una implementación predeterminada y crearlo en lugar de devolver nulo – onof

+0

Estoy usando el patrón NullObject como una solución temporal. Otra opción podría ser envolverlo en otro componente que solo devuelva el valor nulo/no nulo, pero parece un poco torpe. – RasmusKL

+0

ver mi respuesta actualizada. –

Respuesta

6

No, no hay forma de pasar el nulo a través de Windsor.

Si el componente es nulo, obviamente no se puede utilizar, por lo que sería inútil si eso fuera posible de todos modos.

Si está utilizando este componente solo como una propiedad en algún otro componente, creo que sería mejor pasarlo como DynamicParameter. Windsor lo ignorará si es nulo.

+3

Es una dependencia transitoria que a veces es nula, generalmente tiene un valor significativo. Se llama al método de fábrica para cada solicitud. No puedo ver cómo eso es completamente inútil. – RasmusKL

+3

Acepto que sería útil permitir nulos. Sería una buena forma de invertir objetos estáticos, p. en WCF, 'ServiceSecurityContext.Current'. Sin embargo, eso puede ser nulo si el usuario no está autenticado. Un patrón de objeto nulo es la mejor manera. –

Cuestiones relacionadas