2

我在asp.net中構建了一個簡單的MVC應用程序。我想遵循dependency inversion principle,我不知道我是否正確。依賴倒置原則和接口的位置

我目前正在認證系統上。我有一個使用Authenticator服務的AccountController。 Authenticator服務通過構造函數注入注入到控制器中。

public class AccountController : Controller 
{ 
    private IAuthenticator _authenticator; 

    public AccountController(IAuthenticator authenticator) 
    { 
     _authenticator = authenticator; 
    } 

    // 
    // POST: /Account/Login 

    [HttpPost] 
    public ActionResult Login(LoginModel model, string redirectToUrl = null) 
    { 

    ... 

    } 

結構化的文件是這個:

enter image description here

但我想,如果我想要一個完全顛倒的控制器和它的依賴,我將不得不移動之間體面爲控制器旁邊的身份驗證服務的接口。事情是這樣的:

enter image description here

這樣,客戶端 - 控制器 - 和服務的抽象會璧坐在同一個命名空間。所以服務接口的變化將來自客戶端,並將傳播到服務實現。而不是以前的方式,服務中發生的變化被傳播到客戶端。依賴項被倒置 - 服務依賴於客戶端。

我可以看到這樣做的好處時,客戶端和服務都在不同的組件,但我並不知道我是否應該這樣做,當涉及到同樣的組裝。

,並讓我知道,如果我這樣做是否正確,我應該使用的第一個文件結構或第二個。

感謝, Asier

回答

8

代碼文件的位置差別不大 - 這是組織你的源代碼,只能自認倒黴控制反轉做的事。

最重要的是,你是注入的依賴到控制器,你是。

+0

確實。個人喜好。順便說一句我認爲第一種方法更清潔,因爲我不會在Controllers文件夾中搜索IAuthenticator。但它與DI概念無關。 –