2010-02-11 6 views
7

Estoy probando la última versión de StructureMap, para aprender sobre los contenedores de IoC y similares. Como mi primera prueba, no tengo la clase siguiente:Código de excepción de StructureMap 205 Falta la propiedad de instancia solicitada

public class Hospital 
    { 
     private Person Person { get; set; } 
     private int Level { get; set; } 

     public Hospital(Person employee, int level) 
     { 
      Person = employee; 
      Level = level; 
     } 

     public void ShowId() 
     { 
      Console.WriteLine(this.Level); 
      this.Person.Identify(); 
     } 
    } 

Luego uso StructureMap así:

static void Main() 
     { 
      ObjectFactory.Configure(x => 
             { 
              x.For<Person>().Use<Doctor>(); 
              x.ForConcreteType<Hospital>().Configure.Ctor<int>().Equals(23); 
             }); 

      var h = ObjectFactory.GetInstance<Hospital>(); 

      h.ShowId(); 
     } 

Así que estoy pasando un objeto médico como el primer parámetro del constructor al hospital, y yo estoy tratando de establecer el parámetro level a 23. al ejecutar el código anterior me sale:

Excepción no controlada: StructureMap.StructureMapException: StructureMap Código de excepción: 205 Missing solicitó propiedad "nivel" Instancia para ClaveInstancia "5f8c4b74-a398-43f7- 91d5-cfefcdf120cf"

Así que parece que no estoy estableciendo el parámetro level en absoluto. ¿Puede alguien señalarme en la dirección correcta? ¿Cómo configuro el parámetro level en el constructor?

Saludos. Jas.

Respuesta

12

Estabas muy cerca. Usó accidentalmente el método System.Object.Equals en la expresión de dependencia en lugar del método Is. También recomendaría cuando configure tipos comunes como cadenas o tipos de valores (int, DateTime) para especificar el nombre del argumento del constructor para evitar la ambigüedad.

Aquí es mi prueba con lo que busca:

[TestFixture] 
public class configuring_concrete_types 
{ 
    [Test] 
    public void should_set_the_configured_ctor_value_type() 
    { 
     const int level = 23; 
     var container = new Container(x => 
     { 
      x.For<Person>().Use<Doctor>(); 
      x.ForConcreteType<Hospital>().Configure.Ctor<int>("level").Is(level); 
     }); 

     var hospital = container.GetInstance<Hospital>(); 

     hospital.Level.ShouldEqual(level); 
    } 
} 
+0

Grande, que trabajó :) –

+0

tuve un problema similar, aquí otra posible solución para el mismo mensaje de error: http: // stackoverflow. com/questions/6998346/telling-structuremap-to-use-another-constructor – Jaider

Cuestiones relacionadas