1

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

4

1 回答 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 回答