tags:

views:

33

answers:

4

My web App prepares out of a db for one or two minutes a specific and read-only object list, once only when IIS starts. This does not change any more unless the admin triggers recreation by a specific URL.

The Interface of the objects looks like this:

public interface IProductsRepository {
    IQueryable<Row1> ProductItmes { get; }
    IQueryable<Row2> ProductLegItems { get; }
}

I am now not really sure where i put the object so it is accessible from any controller. Should i put the load method to protected void Application_Start() as a static object? What is the best approach?

A: 

This may or may not meet your needs but Castle Windsor allows you to specify how many instances a component (like a data repository) will have. I personally had a typo when working with this (lifesyle instead of lifestyle) that resulted in the data repository persisting after a post without my initializing it.

http://www.castleproject.org/container/documentation/trunk/usersguide/lifestyles.html

Mayo
+1  A: 

you need to use a dependency injection framework here so you can instantiate this one and pass it into all of your controllers. This doesn't come out of the box with asp.net-mvc but you can find a number of options that will do the trick like castle windsor or autofac

ooo
A: 

A good place would be the the Cache. You can load the Cache on Application_Start()

Malcolm Frexner
A: 

You can store it in Application object, but you should inject it into Controller. You shouldn't reference directly Application object, because this will make your application less testable. I use Ninject (http://ninject.org/) for this purpose.

LukLed