如何在公共静态中使用工作单元模式

时间:2013-08-01 16:56:05

标签: asp.net-mvc unit-of-work

我正在使用此代码在各个页面中选择4最后一个数据库记录

public static List<Tour> GetLastTour()
{
    using (var Context = new MvcHghDbContext())
    {
        return (Context.Tours.Take(4).OrderByDescending(x=>x.Titl  e).ToList());
    }
}

如何在静态类中的静态方法中使用工作单元模式?     但是静态构造函数Erorr!     这样的代码     请帮助我:

public static class DropDownList{
    private  readonly ICatHotellService _catHotellService;
    private  readonly ICatTourismService _catTourismService;
    private  readonly ICatTourService _catTourService;
    private  readonly IUnitOfWork _uow;
    public DropDownList(ICatHotellService CatHotellService, IUnitOfWork ouw, ICatTourService CatTourService, ICatTourismService CatTourismService)
    {
        _uow=ouw;
        _catHotellService = CatHotellService;
        _catTourismService = CatTourismService;
        _catTourService = CatTourService;`
    }
}

2 个答案:

答案 0 :(得分:1)

简短的回答是,这不起作用。静态类可能只有静态构造函数,而这些构造函数在创建应用程序时由运行时调用。因此,在配置依赖项注入之前很久就会发生这种情况。最重要的是,您永远不应该在Web应用程序中拥有静态数据上下文,因为这些是应用程序的所有用户共享的,因此使用相同数据上下文的两个用户将相互写入数据模型。

答案 1 :(得分:1)

  • 你根本就没有使用UoW。 UoW意味着在请求调用期间将MvcHghDbContext的一个实例注入服务层的不同类,而不是每次都直接实例化它,例如GetLastTour方法。
  • 不要在服务层中使用静态类。从中提取接口,让IoC容器管理其生命周期。
  • 您甚至可以在静态类中使用服务定位器模式(例如调用ObjectFactory.GetInstance<>)。它是一种反模式,应该尽可能避免,因为现在IoC容器是你班级的依赖。