I see "IoC" and "DI" mentioned pretty much everywhere for ASP.NET MVC. While I'm well aware of ... 'kind of' what these are, it's one of those almost ambiguous, amorphous floating concepts that seems to have either passed me by, or I'm just not looking in the right place. With the upcoming release of ASP.NET MVC 3.0, I'm seeing it even more. So much so that it feels like it's an entire part of programming I simply don't know about.
I've tried looking for books on the subjects, but most of what I find seems to make a lot of assumptions (history in Ruby, understanding what it is but not how to use it, etc).
I'm just asking upfront and plain. What is IoC, and why do I care about it? Are there any decent websites that cover this from a beginner programmer perspective? Assume I know nothing about it. Assume I know nothing but C#. I read every book, blog, and tutorial on C# from .NET 1.1 to .NET 2.0, and when .NET 3.5 and LINQ hit, it just became so much to handle that I couldn't keep up. I am a rookie developer working in ASP.NET MVC/C# and I can't help but feel I am missing something very important. (I'm having a lot of the same feelings about DI (dependency injection))
I've googled, I've read blogs, I've seen Castle.Windsor
, I've seen sample code, I've browsed books and webcasts, and I'm still so in the dark. It feels like one of those inside stories at work that you know you should know about, but for some reason, you don't, and school didn't really prepare me for it.
StackOverflow has always shown to be the best of the best in the development community for me. Through college and introductory work, and low-level freelance work, I have amalgamated my education on programming from other programmers (though as I understand it that is not neccessarily something to be ashamed of). So once again, I am simply stating to the community.
Huh? I don't understand.
Speaking with many of my colleagues that are trying to break into the same field, many of them feel the same way. So I can't help but feel somewhere along the line, us 'newbie' programmers missed the memo of these conceptual approaches to coding. I'd like to not only get this question answered, but I think a good thread for other people like myself who are trying to understand it might be an intelligent idea (and if one exists, it needs to be made more obvious)
Some of what I have found that has been helpful has been http://www.theserverside.com/news/1321158/A-beginners-guide-to-Dependency-Injection and http://www.dotnetspark.com/kb/1222-inversion-control--beginner-guide.aspx
But I am still left scratching my head on a number of issues as to why this is important. Truthfully, I feel that a large part of the developer community actually feels this way about both IoC and Unit Testing. Very little lays out what it is and the examples discovered are usually pretty poor, or very hard to understand. When .NET was introduced, it was stand-alone. I didn't need a bunch of other concepts to make simple programs run. Now, .NET is a respected language, and everything under the sun is adopting it (nHibernate, MVC, MVP, MVVP, Clouding platforms, gaming architecture, etc)
(Please feel free to point out if I am just flagrantly wrong. I am not calling myself 'good' by any means. But I know C#, and I know it very well. I consider myself a very fast learner and as hard a time as I am having with this I just have to assume that there is some 'hole' out there that needs to be filled)