Я пытаюсь уничтожить все свои службы бизнес-логики после каждого вызова WCF и попытаться добиться его с помощью windsor (Ninject просто не работает), у меня есть следующий контейнерный класс:Замок Виндзор повторно создайте экземпляр
public class LDSWindsorContainer : WindsorContainer
{
public LDSWindsorContainer()
{
AddFacility<WcfFacility>().
Register(
Component.For<IDomainService>().ImplementedBy<DomainService>().LifeStyle.PerWcfOperation(),
Component.For<IChangeLogService>().ImplementedBy<ChangeLogService>().LifeStyle.PerWcfOperation(),
Component.For<ILogService>().ImplementedBy<LogService>().LifeStyle.PerWcfOperation(),
Component.For<ICentreInformationService>()
.ImplementedBy<CentreInformationService>()
.LifeStyle.PerWcfOperation().OnCreate(x=>Debug.WriteLine("Created")),
Component.For<ICentreService>().ImplementedBy<CentreService>().LifeStyle.PerWcfOperation(),
Component.For<ITimeZoneService>().ImplementedBy<TimeZoneService>().LifeStyle.PerWcfOperation(),
Component.For<IBrandService>().ImplementedBy<BrandService>().LifeStyle.PerWcfOperation(),
Component.For<IPricingService>().ImplementedBy<PricingService>().LifeStyle.PerWcfOperation(),
Component.For<IDirectoryService>()
.ImplementedBy<DirectoryService>().LifestyleSingleton());
}
}
всех объектов, кроме IDirectoryService и его реализаций моей бизнес-логика услуги, последний из которых является сам WCF сервис, у меня есть метод следующего Application_Start():
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
var container = new LDSWindsorContainer();
...
}
}
и конструктор моего сервиса выглядит так:
private ILogService Logger { get; set; }
private IDomainService DomainService { get; set; }
private ICentreInformationService CentreInformationService { get; set; }
private ICentreService CentreService { get; set; }
private ITimeZoneService TimeZoneService { get; set; }
private IBrandService BrandService { get; set; }
private IPricingService PricingService { get; set; }
public DirectoryService(IBrandService brandService, ITimeZoneService timeZoneService, ICentreService centreService, ICentreInformationService centreInformationService, IDomainService domainService, ILogService logger, IPricingService pricingService)
{
BrandService = brandService;
TimeZoneService = timeZoneService;
CentreService = centreService;
CentreInformationService = centreInformationService;
DomainService = domainService;
Logger = logger;
PricingService = pricingService;
}
У меня также есть соответствующая строка в моей DirectoryService.svc и Web.config -
Factory="Castle.Facilities.WcfIntegration.DefaultServiceHostFactory, Castle.Facilities.WcfIntegration
и
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" >
<add name="PerRequestLifestyle" type="Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule, Castle.Windsor" />
</modules>
</system.webServer>
До сих пор проблема: мои экземпляры становятся решены разы (для первого вызова), работайте нормально, выходите на конец вызова и не повторно создаете для всех предстоящих вызовов, так что в основном я просто получаю исключение для работы с расположенным объектом, любые идеи очень ценятся, ank вы заранее.
Вашей службы каталогов настроена как синглтон, но зависимости, которые вводят в конфигурируются для каждого запроса, так что это было бы нормальное поведение, я думаю. Вы должны либо сделать свой образ жизни службы каталогов за веб-запрос, либо сделать свои другие сервисы одиночными. –
К сожалению, в этом конкретном случае я не могу изменить поведение службы, но вам нужно воспользоваться преимуществами запроса DI, поэтому я все еще ищу вариант здесь – HardLuck
Когда вы говорите, что не можете изменить поведение, вы имеете в виду вы не можете изменить образ жизни услуг? Кроме того, служба каталогов должна быть одиночной? –