asp.net mvc - 控制器共享对象的最佳方式是啥

Posted

技术标签:

【中文标题】asp.net mvc - 控制器共享对象的最佳方式是啥【英文标题】:asp.net mvc - what is the best way for controllers to share objectsasp.net mvc - 控制器共享对象的最佳方式是什么 【发布时间】:2009-08-04 12:40:24 【问题描述】:

我正在尝试跨多个控制器共享一些对象。做这个的最好方式是什么。我想避免单例,如果可能的话,我想注入这些,但是使用 asp.net mvc 你不是“更新”控制器,所以任何帮助都将不胜感激。

【问题讨论】:

你想分享什么?要发送到视图的公共数据? 【参考方案1】:

让我说,当我开始使用 MVC 时,我遇到了同样的问题。然后我了解了 IoC(控制反转)容器和依赖注入,这些东西能让你做多少事情真是太神奇了。

该项目将Castle Windsor、NHibernate 和ASP.NET MVC 集成到一个包中。 http://code.google.com/p/sharp-architecture/

如果你想自己做,你可以选择你最喜欢的 IoC 容器。 MVC 有一些绑定,或者你可以自己滚动。如果你想自己做,你必须实现 IControllerFactory 并设置 MVC 使用你的工厂。这是我的。

public class ControllerFactory : IControllerFactory

    private readonly IDependencyResolver _controllerResolver;

    private RequestContext RequestContext  get; set; 

    public ControllerFactory(IDependencyResolver controllerResolver)
    
        _controllerResolver = controllerResolver;
    

    public void ReleaseController(IController controller)
    
        _controllerResolver.Release(controller);

        var disposableController = controller as IDisposable;

        if (disposableController != null)
            disposableController.Dispose();
    


    public IController CreateController(RequestContext requestContext, string controllerName)
    
        Assert.IsNotNull(requestContext, "requestContext");
        Assert.IsNotNullOrEmpty(controllerName, "controllerName");

        RequestContext = requestContext;

        try
        
            var controllerInstance = _controllerResolver.Resolve<IController>(controllerName.ToLower() + "controller");
            return controllerInstance;
        
        catch(Exception ex)
        
            throw new HttpException(404, ex.Message, ex);
        
    


【讨论】:

以上是关于asp.net mvc - 控制器共享对象的最佳方式是啥的主要内容,如果未能解决你的问题,请参考以下文章

在 asp.net-mvc 中从服务器读取文本文件的最佳方法是啥

使用存储库时,ASP.NET MVC 中业务逻辑的最佳位置是啥?

为啥 Asp.Net MVC 不在我的共享目录中搜索视图?

如何将消息插入取决于会话值的视图。 ASP.NET MVC。最佳实践

如何在 ASP.NET MVC 中的 2 个不同项目/应用程序之间共享母版页?

在 ASP.NET MVC 3 中的多个服务之间共享一个工作单元