在我们的代码库中有一个基本控制器和一个派生控制器。在调用BaseController
的基本控制器中,使用如下所示的属性注入依赖项。
private IAuditRepository _audit;
protected IAuditRepository Audit
{
get { return _audit ?? (_audit = DependencyResolver.Current.GetService<IAuditRepository>()); }
}
继承基本控制器的派生控制器也被多个控制器继承。让我们说这个派生的控制器叫做BaseProjectController
。这个控制器有一个ProjectRepository
所以不是遵循BaseController
中给出的相同方法,代码的原始作者在构造函数中注入了这个存储库,如下所示。
private IProjectRepository _projectRepository;
protected BaseProjectController(IProjectRepository projectRepository)
{
_projectRepository = projectRepository;
}
因此,与Project
相关的任何控制器都将继承BaseProjectController
,并且每个控制器都需要实现类似的代码段。
public class ProjectActivityController : BaseProjectController
{
public ProjectActivity(IProjectRepository projectRespository)
:base(projectRespository) { }
}
我发现使用第一种方法很容易,只需从继承BaseProjectController
的控制器调用属性,而不需要在构造函数中注入它。
问题是为什么这种方法可以在BaseController
中遵循相同的方法?两者有什么区别?为什么你会选择第一种方法而不是第二种方法 - 反之亦然?
答案 0 :(得分:2)
我可以描述这两种方法的优缺点,所以,你自己决定。
优点:
缺点:
反之亦然:)
因此,比较利弊并作出决定。