我正在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)
{
...
}
文件的结构是这一个:
但我想如果我想要完全颠倒控制器及其依赖关系之间的重要性,我将不得不将身份验证服务的接口移到控制器旁边。像这样:
这样,客户端 - 控制器 - 以及服务的抽象将位于同一名称空间中。因此,服务接口的更改将来自客户端,并将传播到服务实现。而不是以前的方式,服务中发生的变化传播到客户端。依赖项是Inverted - 服务依赖于客户端。
当客户端和服务处于不同的程序集中时,我可以看到这样做的好处,但是我不确定在相同的程序集中我是否应该这样做。
让我知道我是否正确行事,是否应该使用第一个文件结构或第二个文件结构。
谢谢, Asier
答案 0 :(得分:10)
代码文件的位置没什么区别 - 这是组织源代码的问题,与控制反转无关。
重要的是你将依赖注入到控制器中,你就是这样。