2015-12-07 41 views
2

使用依賴注入時,哪個模塊持有接口?我的webapi項目仍然依賴於數據訪問層嗎?

例如,如果我有一個webapi服務項目和一個數據訪問層項目,那麼這意味着我將IUnitOfWork,IRepository等的定義放在webapi項目中,並將實現這些的UnitOfWork,Repository等類數據訪問項目中的接口?其次,如果我使用的NinjectConfigurator類包含我所有的綁定,並將其放置在我的webapi項目中,以便它在啓動時初始化,這並不意味着我的webapi項目現在依賴於數據訪問層,因爲綁定函數必須知道在數據訪問層中定義的類型?

例如。

private void AddBindings(IKernel container) { 
    container.Bind<myDbContext>().ToSelf().InRequestScope(); 
    container.Bind<IUnitOfWork<myDbContext>>().To<UnitOfWork<myDbContext>>(); 
    container.Bind<IUserRepository>().To<UserRepository>(); 
} 
+0

Ninject需要將接口映射到實現。我正在使用Ninject在我的webapi項目中執行依賴注入。由於Ninject需要在使用前進行配置,並且AddBindings函數位於我的webapi項目中,這並不意味着我的webapi項目依賴(或瞭解)所有映射到這些接口的具體實現?如果是這樣,我們還沒有解決任何問題。如果UnitOfWork發生變化,我仍然需要重新編譯我的webapi。 – Legion

回答

0

最好的做法是:

  1. 領域層(實體,接口,用於存儲庫和服務)
  2. 數據層(庫)
  3. 的IoC層(Ninject和所有模塊)
  4. 表示層(Web項目)

您的綁定將位於IoC層中,並且在您的Web項目中您只需調用模塊。

private static void RegisterServices(IKernel kernel) 
{ 
    kernel.Load(new DomainModules(), new DataModules(), new CrossCuttingModule(), new ServiceModules());   
}