Autofac адаптация для замка Виндзор - PullRequest
0 голосов
/ 19 декабря 2011

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

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

1 Ответ

3 голосов
/ 19 декабря 2011

Вы можете заставить Виндзор использовать фабричный метод при разрешении конкретной службы, указав ее с помощью 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
);
...