У меня есть трехслойное приложение. Каждая из частей имеет зависимости от другой части моего решения. Я использовал для реализации IDependencyResolver
внутри проекта MVC. Это неправильный путь, потому что это приводит к нарушению архитектурных правил разделения слоев. Мой проект MVC имел ссылку на слой DAL. Это плохая практика кодирования. Я знаю, что я могу создать отдельный проект библиотеки классов. Он будет иметь ссылки на любые другие проекты моего решения. Он разрешит все зависимости. Я слышал, что это не лучший способ. Существует лучший способ. Каждый проект моего решения должен решить, что он владеет зависимостями. Я не понимаю, как собрать все это вместе. Поэтому я нашел эту полезную статью: Dependency Injection Best Practices in an N-tier Modular Application, но это кажется слишком сложным и сложным. Есть ли другой способ? У меня есть аналогичная структура решения. UserRepository
возвращает запрашиваемого пользователя.Как реализовать IDependencyResolver в приложении уровня N уровня?
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 - Почему мне нужно ссылаться на все слои/сборки в приложении ввода?] (http://stackoverflow.com/questions/9501604/ioc-di-why-do-i-have-to-reference-all-layers-assemblies-in-entry-application) – NightOwl888