首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Castle Windsor 3跨多个web请求保持PerWebRequest对象

Castle Windsor 3跨多个web请求保持PerWebRequest对象
EN

Stack Overflow用户
提问于 2012-08-02 18:11:10
回答 2查看 1.2K关注 0票数 3

我有一个MVC4项目,正在尝试将一个PerWebRequest对象注入到我的控制器中。但是,似乎没有跨多个请求重新创建对象

代码语言:javascript
复制
 private static IWindsorContainer InitializeWindsor()
    {
        var container = new WindsorContainer().Install(FromAssembly.This());

        // Add Factory facility
        container.AddFacility<TypedFactoryFacility>();

        // Register all controllers from this assembly
        foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
        {
            container.Register(
                AllTypes.FromAssembly(assembly).BasedOn<Controller>().Configure(c => c.LifestyleTransient())
                );
        }

        // Register HTTP Handlers
        container.Register(Component.For<HttpRequestBase>().LifeStyle.PerWebRequest.UsingFactoryMethod(() => new HttpRequestWrapper(HttpContext.Current.Request)));
        container.Register(Component.For<HttpContextBase>().LifeStyle.PerWebRequest.UsingFactoryMethod(() => new HttpContextWrapper(HttpContext.Current)));


        // Register components
        container.Register(Component.For<PerWebRequestObject>().LifeStyle.PerWebRequest);
}

这是我的PerWebRequestObject:

代码语言:javascript
复制
public class PerWebRequestObject
{
    public DateTime DateCreated { get; set; }

    public PerWebRequestObject()
    {
        DateCreated = DateTime.UtcNow;
        Debug.WriteLine("Created: " + DateCreated.ToLongTimeString());
    }
}

这是我的TestController:

代码语言:javascript
复制
public class TestController : BaseController
{
    public PerWebRequestObject pwrObject { get; set; }

    public ActionResult Test()
    {
        Debug.WriteLine(pwrObject.DateCreated.ToLongTimeString());
        return new ContentResult();
    }
}

为什么这不起作用?请注意,我使用了WindsorControllerFactory,并像这样释放了控制器:

代码语言:javascript
复制
    public override void ReleaseController(IController controller)
    {
        var disposableController = controller as IDisposable;
        if (disposableController != null)
            disposableController.Dispose();

        _windsorContainer.Release(controller);
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-08 19:17:25

升级到Castle Windsor v3.1为我们修复了这个问题,不需要更改任何代码。

我想一定是Windsor v3.0 + MVC 4的组合出了问题。

票数 1
EN

Stack Overflow用户

发布于 2012-09-04 05:59:42

两件事:

如何知道对象的生命周期不正确(未在web-requests)?中重新创建)

一种可能的解释是您的依赖项看起来像这样:

控制器-->单例-->您的每web请求组件

这是一种生活方式的不匹配,这可以解释你所看到的行为

  • 请勿丢弃控制器。这是容器的工作。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11775346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档