2012-05-09 15 views
11

Ho una classe con un costruttore che ha un parametro con un valore predefinito. Con Ninject 2.2, sarebbe onorare l'attributo [Optional] e lavorare bene senza legame definito contro un costruttore dichiarato in questo modo:Utilizzo dei valori di parametro predefiniti con Ninject 3.0

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

Dal momento che l'aggiornamento a Ninject 3.0, costruzione di questo oggetto non riesce con un messaggio che indica che il fornitore restituito null:

metodo ValidatorIsolated.Tests.EmployeeValidatorTest.CreateEmployeeValidatorTest ha gettato un'eccezione:

Ninject.ActivationException: Errore activatin g IValidator {PersonName} utilizzando l'auto-associazione implicita condizionale di IValidator {PersonName}

Provider restituito null.

percorso

Attivazione:

2) Iniezione di dipendenza IValidator {PersonName} nel parametro personNameValidator di costruttore di tipo EmployeeValidator

1) Richiesta di IValidator {Employee}

Suggerimenti:

1) Assicurarsi che il provider gestisca correttamente le richieste di creazione.

è l'attributo [Optional] ancora onorato quando è presente un valore predefinito per un parametro e qual è il modo migliore per gestire l'iniezione con i parametri opzionali come questo?

risposta

15

L'attributo facoltativo viene ignorato in questa situazione perché è sempre disponibile il valore predefinito- Ma il valore fornito è nullo. Null non è un valore consentito per impostazione predefinita.

È possibile sovrascrivere questo comportamento impostando NinjectSettings.AllowNullInjection su true.

+0

Questo ha senso. Grazie Remo! –

+0

@The Davester: odora come una richiesta di pull per un miglioramento di un messaggio di errore: P –

+3

Il 'NinjectSettings.AllowNullInjection' è generalmente la proprietà' kernel.Settings 'per quelli che assumono che sia una proprietà statica. – nicodemus13

Problemi correlati