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

时间:2009-08-04 12:40:25

标签: asp.net-mvc sharing

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

1 个答案:

答案 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);
        }
    }

}