I guess the simplest way is to not use the default selector and override the resolution logic then.

Krzysztof

On 30/03/2011 3:10 AM, Cameron Harris wrote:
Hi all,

It seems that if you resolve a component by name with the typed factory facility, and that component doesn't exist, it will just return one of the other components for the type you're resolving.

For example, the following program:

    public interface IPerson
    {
        string Name { get; }
    }

    public class Jack : IPerson
    {
        public string Name { get { return "Jack"; } }
    }

    public class Bob : IPerson
    {
        public string Name { get { return "Bob"; } }
    }

    public interface IHumanFactory
    {
        IPerson GetJack();

        IPerson GetBob();

        IPerson GetFrank();
    }

    class Program
    {
        static void Main(string[] args)
        {
            var ct = new WindsorContainer();
            ct.AddFacility<TypedFactoryFacility>();
ct.Register(AllTypes.FromThisAssembly().BasedOn<IPerson>().WithService.FirstInterface().Configure(x => x.Named(x.Implementation.Name)));
            ct.Register(Component.For<IHumanFactory>().AsFactory());

            var factory = ct.Resolve<IHumanFactory>();
            Console.WriteLine(factory.GetBob().Name);
            Console.WriteLine(factory.GetJack().Name);
            Console.WriteLine(factory.GetFrank().Name);
        }
    }

Outputs:
  Bob
  Jack
  Jack


This seems to be intentional behavior (changing this behavior causes the Castle test named Resolve_component_by_name_with_default_selector_falls_back_to_by_type_when_no_name_found to fail), but I would rather it throw an exception or return null for GetFrank in this example.

Thanks,
Cameron
--
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.

--
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