2012-05-09 17 views
11

Tengo una clase con un constructor que tiene un parámetro con un valor predeterminado. Con Ninject 2.2, se cumpliría el atributo [Optional] y funcionar bien sin unión definido contra un constructor declarado así:Usar valores de parámetros predeterminados con Ninject 3.0

public EmployeeValidator([Optional] IValidator<PersonName> personNameValidator = null) 

Desde la actualización a Ninject 3.0, la construcción de este objeto falla con un mensaje que indica que la proveedor devuelve nulo:

método de ensayo ValidatorIsolated.Tests.EmployeeValidatorTest.CreateEmployeeValidatorTest lanzó excepción:

Ninject.ActivationException: Error activatin g IValidator {PersonName} con el autoenlace implícito condicional de IValidator {PersonName}

El proveedor devolvió nulo.

camino

Activación:

2) Inyección de dependencia IValidator {PersonName} en el parámetro personNameValidator de constructor de tipo EmployeeValidator

1) Solicitud de IValidator {Empleado}

Sugerencias:

1) Asegúrese de que el proveedor maneje las solicitudes de creación correctamente.

¿El atributo [Optional] aún se cumple cuando hay un valor predeterminado para un parámetro y cuál es la mejor forma de manejar la inyección con parámetros opcionales como este?

Respuesta

15

El atributo opcional se ignora en esta situación porque siempre existe el valor predeterminado disponible, pero el valor proporcionado es nulo. Nulo no es un valor permitido por defecto.

Puede anular este comportamiento estableciendo NinjectSettings.AllowNullInjection en true.

+0

Eso tiene sentido. Gracias Remo! –

+0

@ The Davester: huele como una solicitud de extracción para una mejora de un mensaje de error: P –

+3

La 'NinjectSettings.AllowNullInjection' es generalmente la propiedad' kernel.Settings 'para aquellos que asumen que es una propiedad estática. – nicodemus13

Cuestiones relacionadas