2010-02-11 6 views
7

Ich probiere die neueste Version von StructureMap aus, um mehr über IoC-Container und dergleichen zu erfahren. Als mein erster Test habe ich die folgende Klasse:StructureMap Exception Code 205 Fehlende angeforderte Instanzeigenschaft

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(); 
     } 
    } 

ich dann StructureMap wie folgt verwenden:

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(); 
     } 

So ein Doktor Objekt als erste Konstruktor param zum Krankenhaus ich vorbei, und ich bin der level param bis 23. Wenn ich den obigen Code ausführen ich zu setzen versuchen:

Unbehandelte Ausnahme: StructureMap.StructureMapException: StructureMap Ausnahmecode: 205 angefordert Fehlende Instanz Eigenschaft "Ebene" für InstanceKey "5f8c4b74-a398-43f7- 91d5-cfefcdf120cf"

So sieht es aus wie ich bin nicht die level param überhaupt einstellen. Kann mir jemand in die richtige Richtung zeigen - wie setze ich den level Parameter im Konstruktor?

Prost. Jas.

Antwort

12

Sie waren sehr nah dran. Sie haben versehentlich die System.Object.Equals-Methode für den Abhängigkeitsausdruck anstelle der Is-Methode verwendet. Ich würde auch empfehlen, allgemeine Typen wie string oder Werttypen (int, DateTime) zu konfigurieren, um den Namen des Konstruktorarguments anzugeben, um Mehrdeutigkeiten zu vermeiden.

Hier ist mein Test mit dem, was Sie suchen:

[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

Großen, die gearbeitet :) –

+0

Ich hatte ein ähnliches Problem, hier eine weitere mögliche Lösung für die gleiche Fehlermeldung: http: // Stackoverflow. com/questions/6998346/telling-structuremap-to-use-another-Konstruktor – Jaider

Verwandte Themen