2011-12-19 6 views
0

Я хочу использовать Castle Windsor для регистрации FakeHttpContext, когда HttpContext недоступен. Может ли кто-нибудь помочь мне перевести следующую регистрацию Autofac в замок Виндзор.Autofac adapt for Castle Windsor

 builder.Register(c => HttpContext.Current != null ? 
      (new HttpContextWrapper(HttpContext.Current) as HttpContextBase) : 
      (new FakeHttpContext("~/") as HttpContextBase)) 
      .As<HttpContextBase>() 
      .InstancePerHttpRequest(); 
+0

посмотрите на 'AddComponentInstance' http://stackoverflow.com/questions/925244/specifying-instance-for-registration-of-a-component-with-castle-windsor – BlackICE

+0

Спасибо, но я не понимаю, как я могу добавить только FakeContext , если реальный HttpContext недоступен. например службе нужен HttpContext и нормальный, он ее получит, но в некоторых случаях вызывается служба, и HttpContext недоступен. Только в этих случаях следует использовать Фейк. – andre

ответ

3

Вы можете сделать Виндзор использовать фабричный метод при решении конкретной услуги, указав один с UsingFactoryMethod - в вашем случае, что-то вроде этого следует сделать трюк:

container.Register(
    Component.For<HttpContextBase>() 
     .UsingFactoryMethod(k => HttpContext.Current != null 
      ? (HttpContextBase)new HttpContextWrapper(HttpContext.Current) 
      : new FakeHttpContext("~/")) 
     .Lifestyle.PerWebRequest 
); 

Для того, чтобы впрыснуть текущий запрос, выполните аналогичный подход:

container.Register(
    Component.For<HttpRequestBase>() 
     .UsingFactoryMethod(k => k.Resolve<HttpContextBase>().Request) 
     .Lifestyle.PerWebRequest 
); 
+0

Я получаю следующую ошибку: (Тип условного выражения не может быть определен, потому что нет никакого неявного преобразования между «System.Web.HttpContextWrapper» и «Xinga.Core.Fakes.FakeHttpContext») – andre

+0

Я изменил ваш код следующим образом: container.Register (Component.For () .UsingFactoryMethod (к => HttpContext.Current = нуль новый HttpContextWrapper (HttpContext.Current), как HttpContextBase :? новый FakeHttpContext ("~ /"), как HttpContextBase)) ; , но теперь я получаю следующее сообщение об ошибке: { «FactoryMethodActivator'1 получил неправильно настроенное компонентную модель для позднего связанного System.Web.HttpContextBase Вы уверены, что вы зарегистрировали этот компонент с" UsingFactoryMethod»?} – andre

+0

спасибо за указание на то, что Мне нужно было четко указать тип возврата из метода фабрики ... Я обновил образец кода, соответственно, – mookid8000

Смежные вопросы