Я пытаюсь заставить 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 является новым экземпляром.
Спасибо