Я изо всех сил пытаюсь найти изящный способ сохранить мой слой DAL отдельно от моего уровня MVC/UI в ASP.NET 5 благодаря новой встроенной инъекции зависимостей, которую я хочу использовать.
Например, у меня есть проект ASP.NET 5, проект бизнес-уровня и проект доступа к данным, в котором у меня есть другой код Entity Framework, такой как сущности и контексты. в ASP.NET 5, чтобы настроить контекст и настроить таргетинг на базу данных, основная документация предполагает, что я делаю что-то подобное в своем классе StartUp.cs
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<BookContext>(options =>
{
options.UseSqlServer(Configuration.Get("Data:ConnectionString"));
});
Это означает, что теперь мне приходится ссылаться на мой DAL в том, что в основном является моим слоем пользовательского интерфейса, что в течение многих лет всегда было плохим практикой в соответствии с различными экспертами и сообщениями в блоге.
Один из способов, с которым я работал, - создать два новых проекта: проект CompositeRoot, содержащий классы factory для создания моих бизнес-классов, которые затем обращаются к DAL, а также проект Utilities с классом Configuration, в котором a ConnectionString
, которое я могу передать в свой контекст, я затем использую встроенный DI, чтобы связать все и не ссылаться на мой DAL в моем слое пользовательского интерфейса. Но я столкнулся с проблемами с последней версией Entity Framework (бета-версия 7), так как теперь не представляется возможным указать строку подключения либо в конструкторе контекста, либо в переопределяемом методе OnConfiguration
. Кроме того, вся документация до сих пор, похоже, не заботится об этом смешении проблем вообще. Так ли это сейчас мы делаем? Доверяйте, что разработчики не будут делать "плохие" вещи, например, ссылки на классы DAL в пользовательском интерфейсе? Или существует шаблон, который люди используют для хранения вещей SOLID с помощью этой новой встроенной DI/конфигурации для ASP.NET 5?