Pascal
Pascal

Reputation: 12885

Inject connectionstring from app.config vs read it from a BaseDataProvider class

Do you see any benefit in injecting the database connnection string from the Global.asax.cs class in ASP.NET MVC compared to the method in reading the connection string from a BaseDataProvider class accessing the app.config file?

Upvotes: 2

Views: 977

Answers (2)

Cristian Lupascu
Cristian Lupascu

Reputation: 40566

I'd prefer to inject any objects needed using constructor injection (whenever possible).

One small advantage I see is transparency regarding a class's dependencies.

For example, if you try to instantiate a class in a test harness (while doing integration testing):

  • in the first case (constructor injection) you immediately see that it needs a connection string and provide one
  • in the second case you instantiate the class (perhaps using a default constructor) and after some trial & error discover that it depends on the ConnectionString property being set

Update: Another advantage of the constructor injection approach is that it decouples the class itself from the mechanism of getting the connection string from the app.config.

This could enable in the future scenarios that you don't even think about right now.

For example, in a project I currently work on I have a component that has db access and I have reused it in several contexts. In some of them it uses a standard connection string coming from the config file, while in others I have another component that decides which connection string to use based on some conditions.

If you go for the second approach, you'll need to change the code in order to support such a functionality.

Upvotes: 3

snappymcsnap
snappymcsnap

Reputation: 2103

I usually take a hybrid approach such that my BaseDataProvider class has an empty constructor which defaults to whatever is stored in the config, but is overriden to accept a connString for cases where I need a connection other than the default.

Then my Global.asax class contains the necessary logic to determine what connection string they might need in a given situation. For example, say you have your web application deployed internationally on servers all over the world, you'd want to connect to the nearest available db server to avoid latency issues. So on user login, I would figure out where my user was and then set them up with the appropriate connection

Upvotes: 0

Related Questions