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

时间:2012-12-27 16:36:04

标签: c# asp.net-mvc inversion-of-control solid-principles dependency-inversion

我正在asp.net中构建一个简单的MVC应用程序。我想关注dependency inversion principle,我不知道我是否做得对。

我目前正在开发身份验证系统。我有一个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)
    {

     ...

    }

文件的结构是这一个:

enter image description here

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

enter image description here

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

当客户端和服务处于不同的程序集中时,我可以看到这样做的好处,但是我不确定在相同的程序集中我是否应该这样做。

让我知道我是否正确行事,是否应该使用第一个文件结构或第二个文件结构。

谢谢, Asier

1 个答案:

答案 0 :(得分:10)

代码文件的位置没什么区别 - 这是组织源代码的问题,与控制反转无关。

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