2009-09-28 10 views
15

Soy nuevo en contenedores IOC y estoy aprendiendo Ninject. Utilicé la versión 2.0 recién descargada de Github.Ninject 2.0 Parámetro constructor: ¿cómo establecer cuándo el constructor predeterminado también está presente?

Estoy tratando de establecer un parámetro de cadena en un constructor cuando también está presente un constructor predeterminado. He estado revisando la fuente de Ninject, pero no estoy lo suficientemente familiarizado con los patrones que se utilizan para identificar fácilmente lo que me falta.

Aquí es mi prueba de aplicación de consola:. "Hello World!".

 static void Main(string[] args) 
     { 
     IKernel kernel = new StandardKernel(); 
     kernel.Bind<ITestClass>().To<TestClass>() 
      .WithConstructorArgument("message", "Hello World!"); 

     var testClass = kernel.Get<ITestClass>(); 

     // Does not work either: 
     //var testClass = kernel.Get<ITestClass>(new ConstructorArgument("message", "Hello World!")); 

     testClass.DisplayMessage(); 
     Console.ReadLine(); 
     } 
    } 

public interface ITestClass 
    { 
    void DisplayMessage(); 
    } 

public class TestClass : ITestClass 
    { 
    public TestClass() 
     { 
     this.message = "Wrong message :("; 
     } 

    private string message; 
    public TestClass(string message) 
     { 
     this.message = message; 
     } 

    public void DisplayMessage() 
     { 
     Console.WriteLine(this.message); 
     } 

La impresora de código de "mensaje equivocado :(" a la consola Si quito el constructor por defecto en TestClass que consiga lo soy yo falta aquí

para aclarar:?. Quiero la clase para imprimir "Hello World!" a la consola con el constructor por defecto presente

Respuesta

8

cadena no es auto-enlazable, por lo que no se cuenta como una dependencia Cuando se ejecuta el anotador .ctor, obtendrá el .ctor predeterminado y la cadena .ctor lo mismo ya que la dependencia no se puede resolver. Puede solucionar esto atribuyendo su cadena .ctor

[Inject] 
public TestClass(string message){...} 

y su código funcionará bien.

+0

Muchas gracias Ian! – Stuart

+0

Acabo de enviar un parche el día de hoy que también debería haber solucionado este problema sin el atributo [Inject]. Ahora se puntúan los parámetros al evaluar qué .ctor usar. –

Cuestiones relacionadas