2010-02-11 5 views
7

J'essaie la dernière version de StructureMap, pour en savoir plus sur les conteneurs IoC et autres. Comme mon premier test, j'ai la classe suivante:Code d'exception StructureMap 205 Propriété instance instance manquante

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

J'utilise ensuite StructureMap comme ceci:

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

Je suis le passage d'un objet docteur comme le premier constructeur param à l'hôpital, et je essaie de régler le level à 23. Lorsque param je lance le code ci-dessus je reçois:

Exception non gérée: StructureMap.StructureMapException: StructureMap Code d'exception: 205 manquant a demandé propriété instance "niveau" pour InstanceKey "5f8c4b74-a398-43f7- 91d5-cfefcdf120cf"

Il semble donc que je ne suis pas la mise en level du tout param. Quelqu'un peut-il me diriger dans la bonne direction - comment puis-je définir le level param dans le constructeur?

Cheers. Jas.

Répondre

12

Vous étiez très proche. Vous avez accidentiellement utilisé la méthode System.Object.Equals sur l'expression de dépendance plutôt que la méthode Is. Je recommande également lors de la configuration des types communs comme les types de chaîne ou de valeur (int, DateTime) pour spécifier le nom de l'argument constructeur afin d'éviter toute ambiguïté.

Voici mon test avec ce que vous recherchez:

[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

Grand, qui a travaillé :) Je –

+0

eu un problème similaire, voici une autre solution possible pour le même message d'erreur: http: // stackoverflow. com/questions/6998346/telling-structuremap-to-use-another-constructor – Jaider

Questions connexes