This has been assigned IOC-267<http://issues.castleproject.org/issue/IOC-267> .
I have a fix which adds a generic constraint of 'where T : class' to all classes which participate in service registration. This fix would prevent the problem at compile-time. All the Windsor tests pass with this change. What are thoughts about this fix? If there is support, I'll submit it as a patch. -r 2011/1/19 Krzysztof Koźmic <[email protected]> > yeap - feel free > > > On 20/01/2011 9:48 AM, Rory Plaire wrote: > > Agreed - an exception on the value type registration would be correct > behavior in this scenario. Should I open a bug in youtrack? > > -r > > 2011/1/19 Krzysztof Koźmic <[email protected]> > >> That's expected behavior. >> >> Value types by definition are not components. I suppose Windsor should be >> throwing when you try to register them in the first place... in order to >> avoid confusion. >> >> >> On 20/01/2011 9:28 AM, codekaizen wrote: >> >>> Castle maintainers - >>> >>> I've come across what appears to be a bug in DefaultKernel.ResolveAll >>> when asking for instances of value types. Here's a test case: >>> >>> var kernel = new DefaultKernel(); >>> >>> kernel.Register(Component.For<String>().Named("A").Instance("A")); >>> kernel.Register(Component.For<String>().Named("B").Instance("B")); >>> >>> // Works ok >>> var stringResolution = kernel.ResolveAll<String>(); >>> >>> kernel.Register(Component.For<Int32>().Named("1").Instance(1)); >>> kernel.Register(Component.For<Int32>().Named("2").Instance(2)); >>> >>> // Throws 'ArgumentException: Target array type is not compatible with >>> the type of items in the collection.' >>> var intResolution = kernel.ResolveAll<Int32>(); >>> >>> Note the ResolveAll<Int32>() throws an ArgumentException. This is due >>> to ResolveAll using a generic Dictionary<IHandler, object>; value type >>> instances are boxed and when the value collection is cast to >>> ICollection so that CopyTo() is available, it apparently doesn't unbox >>> the references into the array created to hold value type instances. >>> >>> I replaced the Dictionary<IHandler, object> with >>> System.Collections.Hashtable, and the CopyTo method works as expected, >>> so this could be a potential fix, however this then breaks the >>> "ResolveAllTestCase.ResolveAll_honors_order_of_registration" test. The >>> note on that test indicates that it is not a good test due to >>> fragility, and I'd have to agree. I can't believe it works as it is >>> with a Dictionary. >>> >>> Another fix would be to loop through the Values collection on the >>> resolved instances and add them to the created array using >>> Array.SetValue, however this reduces performance, since SetValue isn't >>> optimized. >>> >>> Can anyone contribute to this discussion? >>> >>> -rory >>> >>> >> -- >> You received this message because you are subscribed to the Google Groups >> "Castle Project Development List" group. >> To post to this group, send email to >> [email protected]. >> To unsubscribe from this group, send email to >> [email protected]<castle-project-devel%[email protected]> >> . >> For more options, visit this group at >> http://groups.google.com/group/castle-project-devel?hl=en. >> >> > -- > You received this message because you are subscribed to the Google Groups > "Castle Project Development List" 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-devel?hl=en. > > > -- > You received this message because you are subscribed to the Google Groups > "Castle Project Development List" group. > To post to this group, send email to [email protected] > . > To unsubscribe from this group, send email to > [email protected]<castle-project-devel%[email protected]> > . > For more options, visit this group at > http://groups.google.com/group/castle-project-devel?hl=en. > -- You received this message because you are subscribed to the Google Groups "Castle Project Development List" 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-devel?hl=en.
