我有一個三層應用程序。每個部分都與我的解決方案的另一部分有依賴關係。我曾經在MVC項目中實現了IDependencyResolver
。這是一種錯誤的方式,因爲它會導致違反層分離的架構規則。我的MVC項目引用了DAL層。這是一種糟糕的編碼習慣。我知道我可以創建一個單獨的類庫項目。它將引用我的解決方案的任何其他項目。它將解決所有的依賴關係。我聽說這不是最好的方法。有一個更好的辦法。我的解決方案的每個項目都應該解決它擁有的依賴關係。我不明白如何把它放在一起。所以我發現這篇有用的文章:Dependency Injection Best Practices in an N-tier Modular Application,但它似乎太困難和複雜。有另一種方法嗎?我有一個類似的解決方案結構。 UserRepository
返回一個請求的用戶。如何在N層圖層應用程序中實現IDependencyResolver?
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
構造函數可能有很多不同的依賴關係。
我的問題是關於什麼是正確的,最簡單的方法來解決這些依賴關係,避免違反架構規則?
想想運行時的層分離規則。當應用程序由依賴解析器引導時,如果您已正確映射解析器,它將遵循這些規則。看看這個答案http://stackoverflow.com/questions/40401900/bootstrapping-unity-composition-root-location/40403875#40403875 –
可能重複[Ioc/DI - 爲什麼我必須引用所有層/組件in entry application?](http://stackoverflow.com/questions/9501604/ioc-di-why-do-i-have-to-reference-all-layers-assemblies-in-entry-application) – NightOwl888