依赖倒置原则以及放置接口的位置

Asi*_*xea 3 c# asp.net-mvc inversion-of-control solid-principles dependency-inversion

我正在asp.net中构建一个简单的MVC应用程序.我想遵循依赖倒置原则,我不知道我是否做得对.

我目前正在研究身份验证系统.我有一个AccountController,里面使用Authenticator服务.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)
    {

     ...

    }
Run Code Online (Sandbox Code Playgroud)

文件的结构是这样的:

在此输入图像描述

但我想如果我想要完全颠倒控制器及其依赖关系之间的重要性,我将不得不将身份验证服务的接口移到控制器旁边.像这样的东西:

在此输入图像描述

这样,客户端 - 控制器 - 以及服务的抽象将位于同一名称空间中.因此,服务接口的更改将来自客户端,并将传播到服务实现.而不是以前的方式,服务中发生的变化传播到客户端.依赖项是Inverted - 服务依赖于客户端.

当客户端和服务在不同的程序集中时,我可以看到这样做的好处,但是我不确定如果在同一个程序集中我应该这样做.

如果我这样做是正确的,我是否应该使用第一个文件结构或第二个文件结构,请告诉我.

谢谢,阿西尔

Ode*_*ded 10

代码文件的位置几乎没有区别 - 这是组织源代码的问题,与控制反转无关.

重要的是你将依赖注入到控制器中,你就是这样.