/// <summary> /// Get a delegate capable of creating channels. /// </summary> /// <param name="clientModel">The client model.</param> /// <param name="contract">The contract override.</param> /// <param name="burden">Receives the client burden.</param> /// <returns>The <see cref="ChannelCreator"/></returns> public ChannelCreator GetChannelCreator(M clientModel, Type contract, out IWcfBurden burden) { burden = new WcfBurden(Kernel); var scope = new Scope(contract, clientModel, this, burden); return(scope.BuildChannelCreator()); }
protected void ConfigureServiceHost(ServiceHost serviceHost, IWcfServiceModel serviceModel, ComponentModel model) { serviceHost.Description.Behaviors.Add( new WindsorDependencyInjectionServiceBehavior(kernel, model) ); var burden = new WcfBurden(kernel); var contracts = new HashSet <ContractDescription>(); Dictionary <IWcfEndpoint, ServiceEndpoint> endpoints = null; if (serviceModel != null && serviceModel.Endpoints.Count > 0) { endpoints = new Dictionary <IWcfEndpoint, ServiceEndpoint>(); var builder = new ServiceEndpointBuilder(this, serviceHost); foreach (var endpoint in serviceModel.Endpoints) { endpoints.Add(endpoint, builder.AddServiceEndpoint(endpoint)); } } var extensions = new ServiceHostExtensions(serviceHost, kernel) .Install(burden, new WcfServiceExtensions()); if (serviceModel != null) { extensions.Install(serviceModel.Extensions, burden); } extensions.Install(burden, new WcfEndpointExtensions(WcfExtensionScope.Services)); if (endpoints != null) { foreach (var endpoint in endpoints) { var addContract = contracts.Add(endpoint.Value.Contract); new ServiceEndpointExtensions(endpoint.Value, addContract, kernel) .Install(endpoint.Key.Extensions, burden); } } if (serviceHost is IWcfServiceHost) { var wcfServiceHost = (IWcfServiceHost)serviceHost; wcfServiceHost.EndpointCreated += (_, e) => { var addContract = contracts.Add(e.Endpoint.Contract); var endpointExtensions = new ServiceEndpointExtensions(e.Endpoint, addContract, kernel) .Install(burden, new WcfEndpointExtensions(WcfExtensionScope.Services)); if (serviceModel != null) { endpointExtensions.Install(serviceModel.Extensions, burden); } }; } serviceHost.Extensions.Add(new WcfBurdenExtension <ServiceHostBase>(burden)); }