2011-03-02 12 views
13

¿Cómo puedo configurar Ninject para resolver null con mi inyección de constructor? Estoy usando ToMethod con un método de fábrica y InTransientScope. Mi fábrica está diseñada para devolver null si ciertas cosas no se cumplen. Sin embargo, Ninject arroja una excepción que me obliga a usar un constructor sin parámetros, que me gustaría evitar.Configurar Ninject para resolver nulo al usar ToMethod

estoy vinculante de esta manera:

Bind<IClient> 
    .ToMethod(x => someFactoryMethod()) 
    .InTransientScope(); 

someFactoryMethod() puede volver IClient o null.

Me gustaría que la clase inyectada obtenga el null pasado en lugar de la excepción. Cuando uso TryGet, obtengo null en mi clase inyectada cuando intento resolverlo.

Estoy utilizando el último Ninject para .Net 4.0.

Respuesta

15

Evitar el uso de null como un caso especial. Intenta usar el Null Object pattern en su lugar. Esto evita tener que contaminan su base de código con los cheques nulos:

Bind<IClient> 
    .ToMethod(x => someFactoryMethod() ?? NullClient.Instance) 
    .InTransientScope(); 

// Null Object implementation of IClient 
public class NullClient : IClient 
{ 
    public static readonly IClient Instance = new NullClient(); 

    // Implement the members of IClient to do nothing. 
    public void ClientOperation() 
    { 
     // noop. 
    } 
} 
27

Tiene que configurar que null está permitido. No tengo ningún código fuente a mano en el momento pero debe ser algo como lo siguiente:

new StandardKernel(new NinjectSettings { AllowNullInjection = true }); 
+18

¿Hay alguna forma de que pueda especificar esto solo en mi llamada a 'Bind'? –

1

Puede marcar su constructor con el atributo Optional.

+13

No quiero decorar mis clases con atributos de Ninject. –

Cuestiones relacionadas