Я понимаю, что с IOC вы можете заменить реализации, просто отредактировав файл конфигурации и т. Д.
НО, что происходит, когда классы связаны с определенными таблицами базы данных и sprocs, вы не можете просто поменять местами реализацию, поскольку классы/сущности привязаны к определенным таблицам и хранимым процедурам.
Я прямо здесь?
2 ответа
Когда вы внедряете экземпляр класса A в экземпляр класса B, вы делаете это на том основании, что A выполняет контракт, на который может полагаться B, обычно определяемый интерфейсом (но также может быть выполнен классом или суперклассом). Если B не удовлетворяет этому контракту, поведение не определено.
Итак, все сводится к следующему: когда вы взаимодействуете таким образом, вы не должны беспокоиться о том, совпадают ли структуры таблиц или нет. Вы должны быть обеспокоены правильностью интерфейса.
Кроме того, по моему опыту, подобные ОО-сущности в смысле ORM, как правило, не внедряются. Обычно инъекция происходит с поставщиками услуг.
Что Клетус говорил...
public class CustomerService //may implement extend from some base
{
public ICustomerDao customerDAO { get; set; } //the injected object
}
CustomerService
— это класс вашего бизнес-уровня (например), в который вы можете внедрить некоторый CustomerDao с внедрением зависимостей, используя контейнер IoC. То, что вы можете вводить, определяется контрактом ICustomerDao
. Таким образом, все, что реализует это, будет разрешено вводить сюда.
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.