2015-02-04 1 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 

Подсказка: вы должны использовать один и тот же контейнер