我的网络应用程序从数据库中准备一两分钟的特定和只读对象列表,只有在IIS启动时。除非管理员通过特定URL触发娱乐,否则这不会再发生变化。
对象的界面如下所示:
public interface IProductsRepository {
IQueryable<Row1> ProductItmes { get; }
IQueryable<Row2> ProductLegItems { get; }
}
我现在不确定我放置对象的位置,以便可以从任何控制器访问它。
我应该将加载方法作为静态对象放到protected void Application_Start()
吗?什么是最好的方法?
答案 0 :(得分:1)
您需要在此处使用依赖项注入框架,以便您可以实例化此项并将其传递到所有控制器中。这不是开箱即用的asp.net-mvc,但你可以找到许多选项,可以做到像城堡windsor或autofac
答案 1 :(得分:0)
这可能会或可能不会满足您的需求,但Castle Windsor允许您指定组件(如数据存储库)将具有多少个实例。我个人在处理这个问题时( lifesyle 而不是生活方式)导致数据存储库在帖子之后保持不变而没有初始化它。
http://www.castleproject.org/container/documentation/trunk/usersguide/lifestyles.html
答案 2 :(得分:0)
一个好地方就是Cache。您可以在Application_Start()
上加载Cache答案 3 :(得分:0)
您可以将它存储在Application对象中,但是您应该将其注入Controller。您不应直接引用Application对象,因为这会使您的应用程序不易测试。我为此目的使用Ninject(http://ninject.org/)。