У меня есть приложение. Это приложение использует интерфейс для доступа к базе данных. Этот интерфейс может быть реализован многими классами. Например, один использует EF 4.4, но другие классы могут использовать EF5, который является более эффективным. В будущем, возможно, я буду использовать EF6, потому что он использует методы async. В этом примере все методы используют EF, но, возможно, другие параметры могут использоваться другими способами.
Приложение кодируется один раз, используя интерфейс и в соответствии с конфигурационным файлом использует одну реализацию или другую, поэтому мне нужно только изменить код в одном месте, конструктор, чтобы добавить новый параметр в экземпляр класса, назначенного интерфейсу.
В настоящий момент все методы классов не async
, но в будущем, если я использую EF6, я бы хотел использовать методы async, поэтому я не знаю, возможно ли, что класс, который использует EF6 и реализует интерфейс, может использовать методы async
.
Для асинхронных методов EF6 я бы использовал шаблон async/awiat, поэтому в методе моего класса мне нужно использовать атрибут async. Это позволяет мне использовать ключевое слово await
, когда я вызываю метод async для EF6.
Но этот класс может реализовать интерфейс, который в первый раз предназначен для синхронных методов?
Есть ли способ, которым в основном приложении я могу использовать многие реализации без необходимости изменять код? Некоторые реализации будут использовать асинхронные методы, в то время как другие будут синхронными.