This is quite surprising - I get a NotImplementException thrown when
trying to Resolve<T> a component that has a dependency on a dictionary
(either a Hasedtable or a generic Dictionary<T,U>), when the
dependency is *supplied at runtime*.

I found a workaround - to declare the dependency as System.Object, but
this an ugly hack.

Can someone please point out that I am wrong and indicate what the
appropriate way of supplying a dictionary to a component at runtime.
Here is the test that reproduces the problem (and the workaround).

[Test]
public void ShouldBeAbleToSupplyDictionaryAsARuntimeParameter()
{
    var container = new WindsorContainer();
    container.Register(Component.For<ClassTakingDictionary>());

    var someDictionary = new Hashtable();

    //The call to resolve throws NotImplementedException
    var s = container.Resolve<ClassTakingDictionary>(new
{ SomeDictionary = someDictionary });
    Assert.That(s, Is.Not.Null);
}


[Test]
public void Workaround()
{
    var container = new WindsorContainer();
    container.Register(Component.For<ClassTakingDictionary>());

    var someDictionary = new Hashtable();

    var s = container.Resolve<ClassTakingDictionary>(new
{ SomeDictionaryToBeInjected = someDictionary });
    Assert.That(s, Is.Not.Null);
}

public class ClassTakingDictionary
{
    public IDictionary SomeDictionary { get; set; }

    public object SomeDictionaryToBeInjected
    {
        set { SomeDictionary = value as IDictionary; }
    }
}

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Castle Project Users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/castle-project-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to