Hey Miha, Are you having issues with the server registrations? As we mentioned earlier, there needs to be a change in the component registration fluent interface to allow registering abstract and interfaces types. I plan on making that change.
On Wed, May 13, 2009 at 2:04 PM, Miha Necak <[email protected]> wrote: > > I still haven't been able to register Component as described below. If > anyone has any other suggestion, i would realy appreciate it. > > Regards, Miha > > > Miha Necak wrote: > > Thank you very much for the solution provided below, it opened a cuple > > of new possibilities. I am however still unable to solve the > > registration problem. The reason is that interfaces get skipped during > > registration. I guess that is probaly what you've ment with the last > > part of your answer... Here what i came up with (comments in code): > > > > //-------------------------------- > > > > kernel.Register(AllTypes. > > FromAssemblyContaining(typeof(IService)) > > .Where( > > c => > > { > > var name = c.Name; > > log.Debug(name); > > > > //only classes are selected - interfaces are skipped > > > > return c.Namespace == "AppServices"; > > } > > ) > > .WithService.FirstInterface() > > .Configure(c => c.ActAs(new DefaultServiceModel() > > .AddEndpoints( > > WcfEndpoint.BoundTo(wsHttpBinding).At( > > "http://localhost:9999/" + > > > > //classes don't have description and they implement may interfaces > > //I probably could loop through all of them, but there has to be > some > > //sort of a swith or something to reverse the process - so that > > //interfaces don't get skipped > > > > ContractDescription.GetContract(c.ServiceType)))))); > > > > > > //-------------------------------- > > > > Craig Neuwirt je napisal: > > > You could probably add a marker interface like IService and perform a > > > > > > container.Register(AllTypes.FromAssemblyXXX() > > > .WithService.FromInterface(typeof(IService) > > > .Configure(c => c.ActAs(new DefaultClientModel( > > > WcfEndpoint.BoundTo(wsHttpBinding) > > > .At("http://localhost:9999/" + > > > ContractDescription.GetContract(c.Name)))); > > > > > > Same for server. > > > > > > This may require a small change to registration to allow just > interfaces to > > > be included. I'll have to check > > > > > > > > > On Fri, May 8, 2009 at 5:31 AM, Miha Necak <[email protected]> > wrote: > > > > > > > > > > > In my application i have about 50 services that i have to register > > > > using Windsor and WCF facility. I did some customizations for > security > > > > and session per call behavior. I am trying to find an elegant way to > > > > setup both the client ant the server configuration without copy/ > > > > pasting the code (final three blocks at the bottom of each > > > > configuration). > > > > > > > > > > > > My current client configuration: > > > > //------------------------------------------------------ > > > > var kernel = new WindsorContainer(); > > > > IoC.Initialize(kernel); > > > > > > > > kernel.Register(Component.For<ILogger>().ImplementedBy<CustomLogger> > > > > ()); > > > > kernel.Register(Component.For<IChannelFactoryAware>(). > > > > ImplementedBy<CustomChannelFactoryAware>()); > > > > kernel.AddFacility<WcfFacility>(); > > > > > > > > WSHttpBinding wsHttpBinding = new > WSHttpBinding(SecurityMode.Message); > > > > wsHttpBinding.Security.Message.ClientCredentialType = > > > > MessageCredentialType.UserName; > > > > > > > > kernel.Register(Component.For<IService1>() > > > > .ActAs(new DefaultClientModel(WcfEndpoint.BoundTo(wsHttpBinding) > > > > .At("http://localhost:9999/" + > > > > ContractDescription.GetContract(typeof(IService1)).Name)))); > > > > > > > > kernel.Register(Component.For<IService2>() > > > > .ActAs(new DefaultClientModel(WcfEndpoint.BoundTo(wsHttpBinding) > > > > .At("http://localhost:9999/" + > > > > ContractDescription.GetContract(typeof(IService2)).Name)))); > > > > > > > > kernel.Register(Component.For<IService3>() > > > > .ActAs(new DefaultClientModel(WcfEndpoint.BoundTo(wsHttpBinding) > > > > .At("http://localhost:9999/" + > > > > ContractDescription.GetContract(typeof(IService3)).Name)))); > > > > //------------------------------------------------------ > > > > > > > > > > > > My current server configuration: > > > > //------------------------------------------------------ > > > > var kernel = new WindsorContainer(); > > > > IoC.Initialize(kernel); > > > > > > > > kernel.Register(Component.For<ILogger>().ImplementedBy<ConsoleLogger> > > > > ()); > > > > > kernel.Register(Component.For<IServiceHostBuilder<DefaultServiceModel>> > > > > () > > > > .ImplementedBy<CustomServiceHostBuilder>()); > > > > > > > > kernel.Register(Component.For<ISessionFactory>() > > > > .Instance(ConfigureDatabaseConnection())); > > > > > > > > kernel.Register(Component.For<IServiceBehavior> > > > > ().ImplementedBy<SessionPerCallBehavior>()); > > > > kernel.AddFacility<WcfFacility>(); > > > > > > > > WSHttpBinding wsHttpBinding = new > WSHttpBinding(SecurityMode.Message); > > > > wsHttpBinding.Security.Message.ClientCredentialType = > > > > MessageCredentialType.UserName; > > > > > > > > kernel.Register(Component.For<IService1>().ImplementedBy<Service1>() > > > > .ActAs(new DefaultServiceModel().AddEndpoints( > > > > WcfEndpoint.BoundTo(wsHttpBinding).At("http://localhost:9999/" + > > > > ContractDescription.GetContract(typeof(IService1)).Name)))); > > > > > > > > kernel.Register(Component.For<IService2>().ImplementedBy<Service2>() > > > > .ActAs(new DefaultServiceModel().AddEndpoints( > > > > WcfEndpoint.BoundTo(wsHttpBinding).At("http://localhost:9999/" + > > > > ContractDescription.GetContract(typeof(IService2)).Name)))); > > > > > > > > kernel.Register(Component.For<IService3>().ImplementedBy<Service3>() > > > > .ActAs(new DefaultServiceModel().AddEndpoints( > > > > WcfEndpoint.BoundTo(wsHttpBinding).At("http://localhost:9999/" + > > > > ContractDescription.GetContract(typeof(IService3)).Name)))); > > > > //------------------------------------------------------ > > > > > > > > > > > > Any pointers are more than welcome. > > > > > > > > > > > > > > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
