I am building a 3 tier architecture with a Presentation Layer (PL), Business Logic Layer (BLL) and a Data Access Layer (DAL).
I want to implement it in 3 different physical projects as follows:
- PL Project -> Reference of BLL Dll
 - BLL Project -> Reference of DAL
 - Dll DAL Project -> No Reference
 
Applying the concept of IOC between the BLL and the DAL by defining interfaces and using DI via constructor injection will change the architecture as follows
- PL Project -> Reference of BLL Dll, Reference of DAL Dll (for DI of concrete types to constructors of the BLL Objects)
 - BLL Project -> Reference of DAL
 - DAL Project -> No Reference
 
Ideally I want to achieve the following, while maintaining my IOC with DI.
- PL Project -> Reference of BLL Dll
 - BLL Project -> Reference of DAL Dll
 - DAL Project -> No Reference
 
How is it possible?
Note : I don't want to use an IOC container.