0
我正在構建一個標準的三層應用程序。Ninject在三層應用程序
1控制檯應用程式前端
2業務邏輯層
3數據層
的主要目的是爲了從數據庫表顯示一些客戶數據。
我試圖按照「.NET中的依賴注入」一書中的指導原則,沒有從控制檯到數據層的引用,也沒有從業務層到數據層。允許在需要時輕鬆交換前端和數據層。
比方說,我在叫的CustomerService業務層服務,它有一個GetCustomers()
方法
的CustomerService
的構造函數採用ICustomerRepository
像這樣
public class CustomerService
{
ICustomerRepository repository;
public CustomerService(ICustomerRepository repository)
{
this.repository = repository;
}
public ICollection<Customer> GetCustomers()
{
return repository.GetCustomers();
}
}
在數據層我有
public class CustomerRepository : BLL.ICustomerRepository
{
public ICollection<Customer> GetCustomers()
{
// get the customers from the db
return customers;
}
}
在控制檯應用程序中,我想調用使用Ninj創建CustomerService對象以滿足ICustomerRepository的依賴。
class DIModule : NinjectModule
{
public override void Load()
{
Bind<>(ICustomerRepository).To<??????????????>()
}
}
如何綁定到數據層CustomerRepository類?我必須將控制檯應用程序的引用添加到數據層才能使用? 我在做什麼錯?
這不需要我的控制檯應用程序引用我的數據層嗎?我想避免這種情況。 – tom 2013-02-09 07:23:02
@tom:IoC只是抽象層。當註冊依賴關係時,您需要爲合同(接口)和服務(實現)提供引用,因此需要引用包含兩者的程序集。那麼你從來不會在任何地方使用混凝土類型。 – abatishchev 2013-02-09 07:29:47
在http://stackoverflow.com/questions/12994507/dependency-injection-does-it-violate-separation-of-concerns中遇到過類似的情緒,還是習慣了DI。謝謝。 – tom 2013-02-09 07:42:26