It is kind of theoretical question.
I am already using Unity DY with Service(Facade) pattern on Business layer. I is pretty simple to use it but...
there is obviously performance and memory overhead in every small transaction. Instead of creation of DataContext (read it like "sql-connection") i am create several service objects by unity.
Example: simple operation "GetAllArticles" cause creation of
Useless:
And usefull:
But what if is an HightLoadApplication, and billions of people over the world, trying to get article from my super site? What about garbage collector and server's cpu temperature?
So:
I will be happy to hear your opinion and experience, even if it is not panacea or "best practice".
When we write code, we aim for SOLID Design Principals which make code adaptive to change.
In order to achieve first four - SOLI, we want to inject dependencies.
Is there any alternative solutions?
You can achieve dependency injection (DI) either manually (Poor Man's Dependency Injection) or using Inversion of Control (IoC) container (like Autofac, Ninject, Structure Map, Unity and so).
what should i do in a case of highload application
Using IoC container for DI is never been an issue for speed.
Mark Seemann said , "creating an object instance is something the .Net Framework does extremely fast. any performance bottleneck your application may have will appear in other place, so don't worry about it."
The bottom line is I personally use IoC container in every ASP.Net MVC and Web API projects. Besides, I hardly see any open source MVC and Web API application which does not use IoC container.
For understanding how DI works, take a look at this great article: http://www.martinfowler.com/articles/injection.html
I also recommend reading even half of this book by Mark Seemann: http://www.amazon.ca/Dependency-Injection-NET-Mark-Seemann/dp/1935182501/ref=sr_1_1?ie=UTF8&qid=1454620933&sr=8-1&keywords=mark+seemann
Unless you are trying to set a performance record I do not believe DI will have a noticeable effect on performance. We have been using SimpleInjector for the past year (it is one of the fastest out there) on a website that gets several million hits per day and the performance effect is almost unmeasurable.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With