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。最佳实践