Принято ли иметь параметр функции в качестве Action <T>вместо T и почему? - PullRequest
1 голос
/ 26 апреля 2019

Просто : я заметил, что в приложении ASP.NET Core MVC параметры для некоторых функций обычно используют тип Action<T> вместо типа T.Немного странно, где я могу найти больше информации об этом?

Пример :

services.AddDbContext<FssDbContext>(options => 
  options.UseSqlServer(-something-));

Подробнее : Я являюсьновичок в ASP.NET Core, но не в .NET.Сейчас я работаю над веб-проектом ASP.NET Core MVC и заметил, что многие вызовы функций имеют в качестве параметра System.Action<T> вместо T напрямую.Я предполагаю, что это как-то тесно связано с DI и «не позволяйте пользователю кода создавать экземпляр, но предоставьте ему некоторые настройки», но я хотел бы узнать больше информации об этом - особенно если это общий подход в.NET MVC / Core и где его следует использовать (и где это не рекомендуется), или даже если это какая-то известная определенная концепция, которую я упускаю.

Однако я не могу ничего найтиоб этом, просто простые использования.

Есть ли какой-нибудь ресурс, описывающий это поведение, мотивацию и предложения?

Опять же, меня не интересует «как я могу создать такое поведение», поскольку меня не интересуют «общие мнения», но если есть какое-то официальное определение этой концепции или всемирно известный совет », где(/ если) я должен использовать его в проекте .NET MVC / Core "(например, из MS)?

1 Ответ

0 голосов
/ 26 апреля 2019

Я недостаточно знаком с ASP.NET, чтобы дать вам полный ответ.

Я могу вам сказать, что наличие Action<T> в качестве параметра означает, что библиотека обеспечивает васпройдет что-то, что они могут позвонить.Это обратный вызов .

Они будут использовать его, чтобы дать вам T объект.Зачем им это делать (вместо того, чтобы возвращать T или использовать параметр out)?Возможно, им нужно выполнить некоторую очистку после запуска вашего кода, например, они будут перехватывать исключения, выполнять синхронизацию, распоряжаться ресурсами ... что-то в этом роде.

Еще одно преимущество использования обратного вызова заключается в том, что библиотекаконтролирует что либо вы запускаете код.Если они дают вам T объект (и, возможно, bool, чтобы сказать вам, что нужно запускать ваш код), вы можете просто проигнорировать их.

Возможно также, что код, предназначенный для запуска в немВ конкретном потоке может даже оказаться, что они будут запускать его в будущем по мере необходимости, возможно, даже несколько раз.На самом деле, они могут использовать его аналогично событию, за исключением того, что вы не можете подписываться и отписываться в любое время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...