У меня есть общая инкапсуляция, которую я использовал в своих контроллерах для обработки передачи предупреждений, исключений и регистрации ошибок. Вот простая версия этого:Как создать метод, который возвращает действие с ограниченным параметром?
private void ActionHelper(Action<SpecificDbContext> DatabaseActions)
{
try {
DatabaseActions(db);
}
catch (Exception ex) {
// error handling
}
}
Это делает его таким образом, я могу просто определить взаимодействие с базой данных в анонимной функции и передать его, и он обрабатывает все другие вещи. Мне нужно создать этот ActionHelper на каждом контроллере, поскольку каждый из них использует другой DbContext - я бы хотел его обобщить.
Что мне нужно - это метод, в котором я могу передать тип (который реализует DbContext) и вернуть его выше. Я полагаю, подпись будет выглядеть примерно так:
public Action<T where T : DbContext> Builder(Type type)
и я хотел бы использовать это что-то вроде этого:
Action<SpecificDbContext> ActionHelper = Builder(typeof(SpecificDbContext));
Как я должен построить этот метод, который возвращает действия?
Спасибо, ваш ответ мне помог. Я думаю, что ваша подпись вернет действие, которое принимает параметр DbContext как параметр, хотя мне нужно, чтобы он возвращал действие, которое принимает действие как параметр. Я думаю, что, может быть, подпись должна выглядеть следующим образом: «открытые статические Action> Builder (), где T: DbContext» Но писать тело метода начинает болеть мою голову. Как, черт возьми, я получаю разрывы строк в комментариях? –
cspyr0
@cspyro: Правильно, может быть. Я шел только подписи, которую вы получили. К сожалению, я не уверен, что смогу помочь вам написать этот метод, кроме как сказать, что лямбда-выражения, вероятно, ваши друзья ... –
Хорошо, спасибо за помощь. – cspyr0