Adam/Krzysztof, I added an ignore test to demonstrate the problem with open-generics. It is just Adams example for the most part.
On May 11, 2011, at 4:28 PM, Adam Langley wrote: > I have created a git account, but there was some kind of problem when I > clicked "fork" on the Wcf page - it says I have a fork in my repository, but > when I click it I just get "404, this is not the page you are looking for", > indicating something has gotten corrupted - which is odd considering it only > took me 3 or 4 clicks to do it! > I have posted a question to the admins but turnaround seems to take several > hours - has anyone else had a similar experience? > > Thanks > > Adam Langley > > Please consider the environment before printing this email! > > -----Original Message----- > From: [email protected] > [mailto:[email protected]] On Behalf Of Krzysztof Kozmic > Sent: Wednesday, 11 May 2011 3:20 p.m. > To: [email protected] > Subject: Re: Wcf Facility (server) can not correctly resolve open generic > decorators > > No worries Adam, > > it's in the doco: > http://docs.castleproject.org/How-to-submit-a-fix-to-any-Castle-Project.ashx > > Krzysztof > > On 11/05/2011 12:48 PM, Adam Langley wrote: >> 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: [email protected] >> [mailto:[email protected]] On Behalf Of Krzysztof Kozmic >> Sent: Wednesday, 11 May 2011 10:21 a.m. >> To: [email protected] >> Cc: [email protected] >> 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"<[email protected]> 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: [email protected] >>> [mailto:[email protected]] On Behalf Of Craig Neuwirt >>> Sent: Wednesday, 11 May 2011 7:53 a.m. >>> To: [email protected] >>> Cc: [email protected] >>> 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 [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. >>> >>> -- >>> 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. > > -- > 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.
