.NET Zone is brought to you in partnership with:

I am former Microsoft MVP for Visual C# having 9 Year of experience in Microsoft.NET And other Microsoft Technologies. Please fill free to contact me at www.dotnetjalps.com Jalpesh is a DZone MVB and is not an employee of DZone and has posted 60 posts at DZone. You can read more from them at their website. View Full User Profile

Implementing dependency injection pattern in .NET

03.28.2011
| 5296 views |
  • submit to reddit

Dependency injection pattern is a Software and Architecture designing technique that enables to us to separate concerns, Modules, Classes and Extensibility of Software Development Project. It enables developer to reduce the complexity of project and you can also add new features to software without modifying whole structures. Let’s first understand how dependency injection is important and why we need it.

Why we need dependency inejction?

Let’s a take two class example of shopping cart. I am having two classes ProductDAL and ProductBLL.Here ProductDAL class represent whole data access Methods while ProductBLL implements whole Business logic in software. In normal scenario what we are doing do we will create a new object ProductDAL classes and then we will use that class for our database operations like below.

Public Class ProducDAL
{
//Methods for database operations
}

Public Class ProductBLL
{
ProductDAL objectProductDAL=new ProductDAL();

//Methods for business logic where we are going to use DAL class
}

As you can see in above scenario we will have tight coupling because here we have created the new object of ProductDAL class and we can only change that if we change the container class ProductBLL. This will not help if we need to extend software after sometime and we need to modify the BLL without modifying existing class.

So here comes dependency injection in picture. You can use dependency injection in this kind of scenario.

Ways of implementing Dependency Injection:

There are three ways of implementing dependency injection pattern.
  1. Constructor Injection.
  2. Setter Injection.
  3. Interface base Injection
Constuctor Injection:

In this kind of injection we can use constructor parameters to inject dependencies. Like following.

Interface IDAL
{

}

public class ProductDAL:IDAL
{
//implement the methods of IDAL
}

public class ProductBLL
{
private IDAL myDalObject;

public ProducttBLL(IDAL iDal)
{
myDalObject=iDAL;
}

//use myDalObject to implement business logic
}


Here you can see in above example I have created a Interface IDAL and that interface contains the all method of Data Access Layer. Now we have ProductDAL class which implements that interface. So now you can create object of ProductBLL class like following.

ProductDAL objProductDAL=new ProductDAL();
PrductBLL objProductBLL=new ProductBLL(objProductDAL);


Here you can see you can pass any class as parameter in ProductBLL class which implements IDAL interface. Its not a concrete object so you can change implementation of ProductDAL class without changing ProductBLL class.

Setter Injection:

In this way we can create public property of Interface and then we can use that property to define the object of ProductDAL class like following.

Public Class ProductBLL
{
IDAL _myDalObject;

Pulibc IDAL myDalObject
{
get
{
return _myDalObject;
}
set
{
_myDalObject=value;
}
}
}

So here you can use property to initialize the ProductDAL class like following.

Infterface Injection:

In this section we can have a Method which will have interface as parameter and that will set object of ProductDAL class.

Public Class PrductBLL
{
IDAL _myDALObject;

public IntializeDAL(IDAL dalOjbect)
{
_myDALOjbect=dalObject;
}
}

This is same as constructor injection except that this will intialize object after we call this IntializeDAL method like following.

ProductDAL objProductDAL=new ProductDAL();
PrductBLL objProductBLL=new ProductBLL();
objProductBLL.IntializeDAL(objProductDAL);

Hope you liked it. Stay tuned for more.. Happy programming…

 

 

References
Published at DZone with permission of Jalpesh Vadgama, author and DZone MVB. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)

Comments

Bogdan Marian replied on Tue, 2011/03/29 - 1:44am

Hello,

 I think the "interface injection" technique is named in this way because the dependency injection is made via an interface, not because it is injecting an interface ... Martin Fowler's article regarding DI explains this technique  (http://martinfowler.com/articles/injection.html#InterfaceInjection).

Basically, your example would have to be rewritten in a matter similar with this one:

 

public interface DALInjector
{
     void InjectDAL(IDAL dalToInject)
}
public class ProductBLL: DALInjector
{
    //...

    public IDAL DAL
    {
       get;
       set;
    }

    //...

   void InjectDAL(IDAL daltoInject)
   {
      DAL = dalToInject;
   }
}
//Client code
IDAL dalToInject = new ProductDAL();

ProductBLL productBLL = new ProductBLL();
productBLL.InjectDAL(dalToInject);

Imdadyano Yano replied on Mon, 2012/03/12 - 8:00am

Nice article, i will appreciate you efforts.

I went through many articles which talks about Implementation of DI patter in .net. 

Some of i want to mention overhere so that we can talk about DI in more detail. There is a nice article by ShivPrasad koiral

http://www.codeproject.com/Articles/29271/Design-pattern-Inversion-of-control-and-Dependency

 

And also msdn has a nice article about DI which is of good  depth.

http://msdn.microsoft.com/en-us/magazine/cc163739.aspx

 

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.