【发布时间】:2017-02-16 12:44:31
【问题描述】:
我有一个三层的应用程序。每个部分都依赖于我的解决方案的另一部分。我曾经在 MVC 项目中实现IDependencyResolver。这是一种错误的方式,因为它会导致违反层分离的架构规则。我的 MVC 项目引用了 DAL 层。这是一种糟糕的编码习惯。我知道我可以创建一个单独的类库项目。它将引用我的解决方案的任何其他项目。它将解决所有依赖项。我听说这不是最好的方法。有一个更好的办法。我的解决方案的每个项目都应该解决它拥有的依赖项。我不明白如何把它们放在一起。所以我发现了这篇有用的文章:Dependency Injection Best Practices in an N-tier Modular Application 但它似乎太难太复杂了。还有其他方法吗?我有类似的解决方案结构。 UserRepository 返回请求的用户。
public interface IUserRepository
{
IEnumerable<UserEntity> GetAll();
}
public class UserRepository : IUserRepository
{
public IEnumerable<UserEntity> GetAll()
{
// some code
}
}
UserService 可以有几个不同的依赖项。
public interface IUserService
{
IEnumerable<UserModel> GetAll();
}
public class UserService : IUserService
{
private readonly IUserRepository userRepository;
private readonly ISecondRepository secondRepository;
private readonly IThirdRepository thirdRepository;
public UserService(IUserRepository userRepository, ISecondRepository secondRepository, IThirdRepository thirdRepository)
{
this.userRepository = userRepository;
this.secondRepository = secondRepository;
this.thirdRepository = thirdRepository;
}
public IEnumerable<UserModel> GetAll()
{
// some code
}
}
最后UserController 构造函数可能有很多不同的依赖关系。
我的问题是解决这些依赖关系避免违反架构规则的正确和最简单的方法是什么?
【问题讨论】:
-
想想运行时层分离的规则。当应用程序由依赖解析器引导时,如果您正确映射了解析器,它将遵循这些规则。看看这个答案stackoverflow.com/questions/40401900/…
标签: c# .net asp.net-mvc dependency-injection unity-container