Приложение WCF. Структура карты Objectfactory потерять экземпляр объекта - PullRequest
0 голосов
/ 01 марта 2012

Я пытаюсь заставить WCF работать с Structuremap. Я взял большую часть кода из блога Джимми Богарда Интеграция StructureMap с WCF

Я повторно использую все свои объекты (Домен, NHIBERNATE, Сервисный уровень), которые были созданы для приложения ASP.nET MVC. У меня есть отдельная библиотека IoC, где я загружаю все регистры

Я добавил global.asax, и в Application Start Event вот что у меня есть:

var webServiceRegistry = new WebServiceRegistry();
var bootStrapper = new IoC.BootStrapper();
bootStrapper.Start();

WebServiceRegistry - это нормальный класс, и в его конструкторе есть следующее:

 var appUser = new AppUser
            {
                Role = userDto.Role,
                Email = userDto.Email,
                Id = userDto.Id,
                CompanyName = dealerDto.Name,
                Name = userDto.Name,
                IsImpersonated = false,
                Impersonater = Guid.Empty
            };
            System.Threading.Thread.CurrentPrincipal = System.Web.HttpContext.Current.User = appUser;
            ObjectFactory.Configure(x => x.For<IAppUser>().Use(appUser));

Все идет хорошо - без ошибок Вещи начинают терпеть неудачу , когда создается экземпляр моего класса обслуживания wcf, который имеет объект Domainservice (IDomainServiceObject domainServiceObject) в конструкторе с ошибкой 202.

Ошибка в реестре DomainService, где не удается получить экземпляр по умолчанию IAppUser

Редактировать

Первоначальная проблема была в том, что у меня была ошибка в конструкторе StructureMapServiceHost.

Теперь я не получаю никакой ошибки, но я не получаю экземпляр IAppUser, который я внедряю. Вместо этого он создает новый экземпляр AppUser.

Кто-нибудь знает, почему это происходит?

Я попытался добавить HttpContextScope, HybridHttpOrThreadLocalScoped и все тот же результат

Я подтвердил, что в то время, когда все регистры вызываются в загрузчике, экземпляр IAppUser является единственным, которому были предоставлены значения в нем (а не создан StructureMap) При запуске приложения он создает весь график.

Как только он входит в webmethod, ILMSUser является новым экземпляром.

Спасибо

1 Ответ

0 голосов
/ 03 марта 2012

Так как вы хотите вернуть один и тот же объект каждый раз, когда вы можете использовать синглтон

this.For<IAppUser>().Singleton().Use(appUser);
...