Dependency Injection
Normal
0
false
false
false
EN-US
X-NONE
SA
MicrosoftInternetExplorer4
Constructor Injection:
interface IBusinessLogic
{
//Some code
}
class ProductBL : IBusinessLogic
{
//Some code
}
class CustomerBL : IBusinessLogic
{
//Some code
}
public class BusinessFacade
{
private IBusinessLogic businessLogic;
public
BusinessFacade(IBusinessLogic businessLogic)
{
this.businessLogic
= businessLogic;
}
}
You'd
instantiate the BusinessLogic classes (ProductBL or CustomerBL) as shown below:
IBusinessLogic productBL = new ProductBL();
Then you can pass the
appropriate type to the BusinessFacade class when you instantiate it:
BusinessFacade
businessFacade = new BusinessFacade(productBL);
Setter Injection:
public class BusinessFacade
{
private
IBusinessLogic businessLogic;
public
IBusinessLogic BusinessLogic
{
get
{
return
businessLogic;
}
set
{
businessLogic = value;
}
}
}
The following code snippet
illustrates to implement setter injection using
the BusinessFacade class shown above.
IBusinessLogic productBL = new ProductBL();
BusinessFacade
businessFacade = new BusinessFacade();
businessFacade.BusinessLogic = productBL;
Interface Injection:
interface IBusinessLogic
{
//Some code
}
class ProductBL : IBusinessLogic
{
//Some code
}
class CustomerBL : IBusinessLogic
{
//Some code
}
class BusinessFacade : IBusinessFacade
{
private IBusinessLogic businessLogic;
public void SetBLObject(IBusinessLogic
businessLogic)
{
this.businessLogic
= businessLogic;
}
}
In the code snippet above,
the SetBLObject method of the BusinessFacade class
accepts a parameter of type IBusinessLogic.
The following code shows how you'd call the
SetBLObject() method to inject a dependency for either type of BusinessLogic
class:
IBusinessLogic
businessLogic = new ProductBL();
BusinessFacade
businessFacade = new BusinessFacade();
businessFacade.SetBLObject(businessLogic);
Or:
IBusinessLogic
businessLogic = new CustomerBL();
BusinessFacade
businessFacade = new BusinessFacade();
businessFacade.SetBLObject(businessLogic);