2016-12-20 10 views
0

Я относительно новичок в замке Виндзор в частности и IoC в целом. Я регистрации мой компонент, как это:Замок Виндзор: переходный образ жизни требует 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 является нулевым PerWebRequestLifestyle может быть использован только в ASP.Net.»

Что меня смущает, потому что образ жизни я выбираю преходяще, не PerWebRequest. Конечно, HttpContext не существует во время запланированной задачи, но мне это действительно не нужно, мне просто нужен экземпляр моего репозитория, который не будет взаимодействовать с каким-либо веб-запросом.

Итак, почему Castle Windsor настаивает на необходимости HttpContext при разрешении моего компонента?

ответ

3

Посмотрите полное сообщение об исключении. Ваш корневой компонент может быть временным, но исключение указывает на одно из его зависимостей для каждого стиля веб-запросов.

Посмотрите на Windsor's diagnostics debugger view, что может помочь вам точно определить его.

+1

Да, это действительно так. После попытки получить право .pdb для Castle Core/Windsor и (управляя шагом в код), это было преступником. –