2010-02-11 60 views
7

我在嘗試使用StructureMap的最新版本,瞭解IoC容器等。正如我的第一次測試,我有下面的類:StructureMap異常代碼205缺少請求的實例屬性

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

然後我用StructureMap這樣的:

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

所以我傳遞一個醫生對象作爲第一個構造函數參數去醫院,我「M試圖當我運行上面的代碼我到level PARAM設定爲23:

未處理的異常: StructureMap.StructureMapException: StructureMap異常代碼:205 失蹤請求實例屬性 「級別」 爲InstanceKey 「5f8c4b74-a398-43f7- 91d5-cfefcdf120cf」

所以看起來我沒有設置level PARAM可言。有人能指出我正確的方向 - 如何在構造函數中設置level參數?

乾杯。 Jas。

回答

12

你非常接近。您偶爾在依賴關係表達式上使用了System.Object.Equals方法,而不是Is方法。我還建議在配置常用類型(如字符串或值類型(int,DateTime))時指定構造函數參數名稱以避免含糊不清。

這裏是我的測試與你在找什麼:

[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

大,是工作:) – 2010-02-12 18:08:50

+0

我有一個類似的問題,這裏同樣的錯誤消息的另一個可能的解決方案:HTTP://計算器。 COM /問題/ 6998346 /說服力-structuremap使用的,另一個構造函數 – Jaider 2015-06-15 20:53:39