我正在尝试跨多个控制器共享一些对象。做这个的最好方式是什么。我想避免单身,我想尽可能注入这些,但使用asp.net mvc,你不是“新”控制器,所以任何帮助将不胜感激。
答案 0 :(得分: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);
}
}
}