2015-02-04 58 views
0

我正在使用Castle Windsor 3.3.0。我需要建立一個登記,看起來像這樣的組件:使用Castle Windsor初始化組件,該組件具有依賴項的字典

public class Foo : IFoo 
{ 
public Foo(Dictionary<string, IBar> allMyBars) 
{...} 
} 

我試圖用這讓我DynamicParameters:

Component.For<IFoo>() 
.ImplementedBy<Foo>() 
.Named("MyFoo") 
.DynamicParameters(
(k, d) => 
    d["allMyBars"] = new Dictionary<string, IBar> 
         { 
          { 
           "Bar1", 
           k.Resolve<IBar>("CreepyBar") 
          }, 
          { 
           "Bar2", 
           k.Resolve<IBar>("MegaBar") 
          } 
         }); 

但是,這似乎並沒有工作。

我在我的智慧結束。有人可以幫忙嗎?

謝謝

回答

2

你忘了組件註冊到一個容器

舉例修復:

 var container = new WindsorContainer(); 

     container.Register(Component.For<IBar>().ImplementedBy<Bar>().Named("CreepyBar")); 
     container.Register(Component.For<IBar>().ImplementedBy<Bar>().Named("MegaBar")); 

     container.Register(Component.For<IFoo>() 
      .ImplementedBy<Foo>() 
      .Named("MyFoo") 
      .DynamicParameters(
       (k, d) => 
        d["allMyBars"] = new Dictionary<string, IBar> 
        { 
         { 
          "Bar1", 
          k.Resolve<IBar>("CreepyBar") 
         }, 
         { 
          "Bar2", 
          k.Resolve<IBar>("MegaBar") 
         } 
        })); 

     var verifyFoo= container.Resolve<IFoo>(); //I checked for 

提示:你必須使用相同的容器

相關問題