I suspect that this may be the same problem I posted about on March 4
("Strange behavior with StartableFacility"), IOC-ISSUE-195. If everything
works as expected if you use c.AddComponent() to register your components
instead of the c.Register() fluent interface, then it's definitely the same
problem (and that can be a workaround you can use until it's fixed).
I suggested a potential fix for the issue and offered to submit a patch, but
I never heard back from anyone about what the preferred method for doing
that would be since the code was moved to github.
Michael Davis
On Mon, Mar 29, 2010 at 7:14 AM, Konstantin <[email protected]>wrote:
> the code of onHandlerStateChanged method should be the following
>
>
> private void onHandlerStateChanged(object source, EventArgs args)
> {
> OnHandlerStateChangedWasCalled = true;
> }
>
>
>
> On Mar 29, 4:11 pm, Konstantin <[email protected]> wrote:
> > Here is test demonstrating the issue
> >
> > [Test]
> > public void Test()
> > {
> > var c = new WindsorContainer();
> > var myFacilty = new MyFacilty();
> > c.AddFacility("my", myFacilty);
> > c.Register(Component.For<A>());
> > Assert.AreEqual(HandlerState.WaitingDependency,
> > myFacilty.Handlers["Tests.A"].CurrentState);
> > c.Register(Component.For<B>().Instance(new B()));
> > Assert.AreEqual(HandlerState.Valid,
> > myFacilty.Handlers["Tests.A"].CurrentState);
> > var a = c.Resolve<A>();
> > Assert.IsTrue(myFacilty.OnHandlerStateChangedWasCalled,
> > "OnHandlerStateChanged was not raised");
> > }
> >
> > //Classes used in test
> >
> > namespace Tests
> > {
> >
> > public class MyFacilty : AbstractFacility
> > {
> > public MyFacilty()
> > {
> > Handlers = new Dictionary<string, IHandler>();
> > }
> >
> > protected override void Init()
> > {
> > Kernel.ComponentRegistered += KernelOnComponentRegistered;
> > }
> >
> > private void KernelOnComponentRegistered(string key, IHandler
> > handler)
> > {
> > Handlers.Add(key, handler);
> > if (handler.CurrentState ==
> > HandlerState.WaitingDependency)
> > {
> > handler.OnHandlerStateChanged +=
> > onHandlerStateChanged;
> > }
> > }
> >
> > private void onHandlerStateChanged(object source, EventArgs
> > args)
> > {
> > Console.WriteLine("onHandlerStateChanged");
> > }
> >
> > public bool OnHandlerStateChangedWasCalled { get; set; }
> >
> > public Dictionary<string, IHandler> Handlers { get; set; }
> > }
> >
> > public struct B
> > {
> > }
> >
> > public class A
> > {
> > public A(B b)
> > {
> > }
> > }
> >
> >
> >
> > }
>
> --
> 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]<castle-project-users%[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.