我正在尝试跨多个控制器共享一些对象。做这个的最好方式是什么。我想避免单例,如果可能的话,我想将它们注入,但是使用 asp.net mvc 你不是“更新”控制器,所以任何帮助将不胜感激。
问问题
1005 次
1 回答
2
让我说,当我开始使用 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);
}
}
}
于 2009-08-04T12:46:17.390 回答