Переходный образ жизни требует HttpContext?
Я регистрирую свой компонент следующим образом:
public static void Register(IWindsorContainer container)
{
container.Register(Classes.FromAssembly(Assembly.GetAssembly(typeof(GenericBaseRepository)))
.InSameNamespaceAs<GenericBaseRepository>()
.WithService.DefaultInterfaces()
.LifestyleTransient());
}
Затем я решаю его в куске кода, который не имеет HttpContext:
var baseRepository = ContainerManager.Container.Resolve<IBaseRepository>();
(IBaseRepository является интерфейсом, реализованным GenericBaseRepository). Это терпит неудачу со следующим сообщением:
"HttpContext.Current имеет значение null. PerWebRequestLifestyle можно использовать только в ASP.Net"
Что меня смущает, потому что стиль жизни, который я выбираю, это переходный, а не PerWebRequest. Конечно, HttpContext не существует во время запланированной задачи - но мне это на самом деле не нужно, я просто хочу экземпляр моего репозитория, который не будет взаимодействовать ни с одним веб-запросом.
Итак, почему Castle Windsor настаивает на необходимости HttpContext при разрешении моего компонента?
1 ответ
Посмотрите на полное сообщение об исключении. Ваш корневой компонент может быть временным, но исключение указывает одну из его зависимостей, используемых для образа жизни веб-запроса.
Взгляните на вид отладчика диагностики Windsor, который может помочь вам точно определить его.