应用程序范围的存储库

时间:2010-03-01 08:53:06

标签: asp.net asp.net-mvc

我正在开发一个新的webproject,我遇到了一个问题,我似乎无法弄清楚如何正确地做到这一点。我的应用程序是使用应该可以从整个应用程序访问的存储库。具体来说,它需要从ASP.NET MVC ActionFilters中调用。

关于这个问题的任何想法?

1 个答案:

答案 0 :(得分:1)

看起来您正在寻找singleton pattern或依赖注入容器(如Castle WindsorUnity)配置了对象的单例生命周期。

在单例中,您在对象上放置一个静态“Instance”属性访问器,并让它始终返回相同的实例。关于单身人士模式有两点需要注意:

  1. 有一些线程问题,MSDN doc关于单身人士
  2. 它通常被认为是反模式,因为它促进了类耦合
  3. 使用DI容器,可以使用任何依赖项(构造函数参数)自动构造对象。配置了“单例生存期”的对象将只构造一次,并且实例与依赖它的所有对象共享(注意线程问题)。

    // The repository argument will be resolved by the DI container
    public ObjectConstructor(IRepositoryInterface repository)
    {
        this.repository = repository;
    }
    

    对于属性(如ActionFilters),其中类由运行时构造,您可以直接访问容器(或其抽象)并请求您的实例:

    this.repository = Container.Instance.Resolve<IRepositoryInterface>();