Dependency Injection is one of the SOLI"D" principle which helps to decouple the code by making sure that we should depend on abstractions not in implementation of concrete classes. The concept is Inversion of control.
Inversion Of Control It was considered as a programming style used to invert the flow of control.
Inversion Of Control It was considered as a programming style used to invert the flow of control.
In Procedural language a code that consumes dependent code is in control of the process i.e. It knows what exactly what method to use and sometimes most like what the implementation is.
To achieve some goal one class need to consume some other class now question is the consumer class really needs to know about dependency on dependent class ?
It is enough for a consumer class to know the properties, behavior etc. of the dependent class rather than knowing which is the dependent class having those properties, behavior etc..
I mean , we can abstract the behavior which is required to use by a consumer in the dependent class and allowing a consumer class use that instance instead of dependent class directly. In this way consumer class need not to know any specifics about dependent class.
Here B(dependent class) implementing an interface IY and A(consumer class) uses an instance of IY. A using B but it does not know that. A only knows that it uses some class that implements IY, can be A, AB or ABC which implements IY.
Advantage Of IOC:
Advantage Of IOC:
It provides decoupling, A is not dependent on B. We won't write any code in A which relies on implementation of B hence any on changes in B we won't make any changes in A.
We can change in "A" which implementation of IY it uses without changing anything in A.
Suppose B implements IY interface and used to send email in some format F1 and C is another class that implements IY interface and sends email in another format F2. Suppose A now wants to send email in format F2 rather than format F1. We don't need to modify anything in A.
Another benefit is code isolation in unit testing.
Now A relies on C rather than B because it want to use format F2 instead of format F1 and we don't want our test case to fail.With IoC since A doesn’t rely on B but on an implementation of IY that just happens to be B.
Same way in unit testing we can change it so that A uses a different implementation of IY, such as a mock object which sends mail in some mock format, and which also allows us to check that A has used it in a correct way.
Now you know the concept, In my next post I will explain this through some exercises.
Dependency Injection in C# - Part 2 (Implementation)
We can change in "A" which implementation of IY it uses without changing anything in A.
Suppose B implements IY interface and used to send email in some format F1 and C is another class that implements IY interface and sends email in another format F2. Suppose A now wants to send email in format F2 rather than format F1. We don't need to modify anything in A.
Another benefit is code isolation in unit testing.
Now A relies on C rather than B because it want to use format F2 instead of format F1 and we don't want our test case to fail.With IoC since A doesn’t rely on B but on an implementation of IY that just happens to be B.
Same way in unit testing we can change it so that A uses a different implementation of IY, such as a mock object which sends mail in some mock format, and which also allows us to check that A has used it in a correct way.
Now you know the concept, In my next post I will explain this through some exercises.
Dependency Injection in C# - Part 2 (Implementation)
Comments
Post a Comment