Я думаю, что это: как передать значения конструктору в моей службе wcf может быть ответом на вашу проблему. Или для чего-то более специфического для Виндзора это может помочь: Внедрение зависимостей в WCF с использованием Castle Windsor .
UPDATE
Хорошо, так что я думаю, что понял это. Прежде всего, проблема в этом атрибуте:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
Если вы не укажете, что Виндзор сможет впрыскивать зависимости в конструктор совершенно нормально - с этим он не может.
Посмотрев на описание этого атрибута здесь Я вижу, что вы хотите, чтобы ваш сервис был одноэлементным, так как для Windsor это значение по умолчанию, вы можете просто удалить этот атрибут, и он должен начать работать для вас и ведите себя так, как вы ожидаете.
Существуют два других стиля жизни, которые могут вас заинтересовать, специально для WCF:
- LifestylePerWcfOperation ()
- LifestylePerWcfSession ()
(укажите их в обычном месте - более подробная информация доступна здесь )
Кстати, вам вообще не нужно ничего делать ServiceHostBase
, вместо этого вы можете использовать метод расширения AsWcfService
следующим образом (лично я предпочитаю такой способ):
container
.AddFacility<WcfFacility>(f => f.CloseTimeout = TimeSpan.Zero)
.Register(
Component
.For<IProviders>()
.Instance(Providers.DbInstance),
Component
.For<IClientExchange>()
.ImplementedBy<ClientExchangeService>()
.AsWcfService(new DefaultServiceModel()
.AddEndpoints(WcfEndpoint
.BoundTo(new BasicHttpBinding())
.At("http://localhost:8000/ClientExchangeService"))));