Hi Krzysztof

Yes I will do that tonight - I will try to base it on the WcfFacility.Tests 
code and will email it.
I have seen mention before of git push/pull something-or-other but I have never 
done it before so I will stick to email unless someone can send me a link on 
how to send my test code straight to git?

Thank you
Adam Langley


 Please consider the environment before printing this email!

From: castle-project-users@googlegroups.com 
[mailto:castle-project-users@googlegroups.com] On Behalf Of Krzysztof Kozmic
Sent: Wednesday, 11 May 2011 10:21 a.m.
To: castle-project-users@googlegroups.com
Cc: krzysz...@kozmic.pl
Subject: RE: Wcf Facility (server) can not correctly resolve open generic 
decorators

Can you provide a failing test with the reproduction
On 11/05/2011 8:17 AM, "Adam Langley" <alang...@winscribe.com> wrote:
> Hi Craig,
> 
> Thanks for that - I will give it a try ASAP.
> I thought it might be something like this - I noticed that when I forced a 
> local resolution to occur, then a final 'ComponentRegistered' event was 
> fired, which reported a 'closed generic' component... specialized to the 
> generic argument (so in this case, IDecorator<IServiceNoDependencies>) - but 
> it was not added to the list of 'registered components'.
> I dont know enough about Castle to comprehend what kind of lifecycle is going 
> on under the hood - it would be ideal if the WCF facility was able to open 
> hosts for these components without 'eager' resolution.
> 
> Thanks for the help Craig,
> 
> Adam Langley
> 
> 
> Please consider the environment before printing this email!
> 
> From: castle-project-users@googlegroups.com 
> [mailto:castle-project-users@googlegroups.com] On Behalf Of Craig Neuwirt
> Sent: Wednesday, 11 May 2011 7:53 a.m.
> To: castle-project-users@googlegroups.com
> Cc: krzysz...@kozmic.pl
> Subject: Re: Wcf Facility (server) can not correctly resolve open generic 
> decorators
> 
> Adam,
> 
> I believe the problem relates to the open-generic registration. The Wcf 
> Facility waits for the service to be in the ready state before it opens the 
> host. In this case, the container shows the ServiceGenericDependency 
> component as waiting for the IDecorator dependency. It would be nice for the 
> container to handle this properly. I have seen this before and added an 
> option to open the service host eagerly. This will not wait for the component 
> to be reported as valid before opening the host. In your example, it resolved 
> the issue
> 
> var wcfFacility=XXXX
> wcfFacility.Services.OpenServiceHostsEagerly = true;
> 
> cheers,
> craig
> 
> 
> On May 7, 2011, at 1:24 AM, Adam Langley wrote:
> 
> 
> Dear Castle groups,
> 
> I have a WCF service which has a single constructor dependency - this 
> dependency is 'generically decorated'.
> 
> i.e. its constructor looks like this:
> 
> public ServiceGenericDependency(IDecorator<IServiceNoDependencies> arg2)
> {
> }
> 
> My 'decorator' constructor looks like this:
> public Decorator(T arg)
> {
> }
> Castle has the typeof(IDecorator<>) registration, and the 
> typeof(IServiceNoDependencies) registered.
> PROBLEM: The WCF Facility fails to create the server.
> IF I add a default constructor to my decorator class, then everything works.
> IF I resolve the WCF service on the server (as a local component, i.e. take 
> WCFFacility out of the equation) then everything works.
> I have included a test program below - just reference WcfFacility + Castle. 
> This is quite an urgent issue for me.
> Thank you!
> using Castle.Windsor;
> using Castle.MicroKernel.Registration;
> using Castle.Facilities.WcfIntegration;
> using System.ServiceModel;
> namespace DecoratorChains
> {
> class Program
> {
> static IWindsorContainer container;
> static void Main(string[] args)
> {
> container = new WindsorContainer()
> .AddFacility<WcfFacility>();
> // this is my decorator, it is capable of decorating any service.
> container.Register(Component.For(typeof(IDecorator<>)).ImplementedBy(typeof(Decorator<>)));
> container.Register(
> Component.For<IServiceGenericDependency>().ImplementedBy<ServiceGenericDependency>().LifeStyle.Transient
> .AsWcfService(new DefaultServiceModel().AddEndpoints(
> WcfEndpoint.BoundTo(new NetTcpBinding())
> .At("net.tcp://localhost/Operations")
> )
> )
> );
> // this is my service that WILL BE decorated, then used as a constructor 
> argument.
> container.Register(Component.For<IServiceNoDependencies>().UsingFactoryMethod(()
>  => new ServiceNoDependencies()));
> 
> var client = ChannelFactory<IServiceGenericDependency>.CreateChannel(
> new NetTcpBinding(), new EndpointAddress("net.tcp://localhost/Operations"));
> // this passes
> var cc = container.Resolve<IServiceGenericDependency>();
> 
> // this fails
> client.DoSomething();
> }
> }
> interface IServiceNoDependencies
> {
> }
> class ServiceNoDependencies : IServiceNoDependencies
> {
> }
> interface IDecorator<T>
> where T : class
> {
> }
> class Decorator<T> : IDecorator<T>
> where T : class
> {
> /// <summary>
> /// Remove this constructor and all tests will pass
> /// </summary>
> /// <param name="arg"></param>
> public Decorator(T arg)
> {
> }
> }
> [ServiceContract]
> interface IServiceGenericDependency
> {
> [OperationContract]
> void DoSomething();
> }
> class ServiceGenericDependency : IServiceGenericDependency
> {
> public ServiceGenericDependency(IDecorator<IServiceNoDependencies> arg2)
> {
> }
> public void DoSomething()
> {
> }
> }
> }
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Castle Project Users" group.
> To post to this group, send email to castle-project-users@googlegroups.com.
> To unsubscribe from this group, send email to 
> castle-project-users+unsubscr...@googlegroups.com.
> 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 castle-project-users@googlegroups.com.
> To unsubscribe from this group, send email to 
> castle-project-users+unsubscr...@googlegroups.com.
> 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 castle-project-users@googlegroups.com.
> To unsubscribe from this group, send email to 
> castle-project-users+unsubscr...@googlegroups.com.
> 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 castle-project-users@googlegroups.com.
To unsubscribe from this group, send email to 
castle-project-users+unsubscr...@googlegroups.com.
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 castle-project-users@googlegroups.com.
To unsubscribe from this group, send email to 
castle-project-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/castle-project-users?hl=en.

Reply via email to