Реальная проблема, которую вы, похоже, описываете, заключается в том, что вы не можете понять, как установить тип возврата Func<>
.Чтобы иметь возможность сделать этот универсальный тип, вам нужно, чтобы InDb
также требовал универсального типа.
public TRet InDb<TRet>(Func<BodModelContainer, TRet> workingWithDb) {
TRet ret = default(TRet);
using (var dbContext = new BodModelContainer()) {
ret = workingWithDb(dbContext);
}
return ret;
}
public Member GetMemberById(int memberId) {
return InDb(dbContext => { return dbContext.Members.Find(new[] { memberId }); });
}
Должен работать (весь код здесь не тестировался) или использовать анонимные методы, которые вы могли бы иметьлокальная переменная и заставляет .Net делать всю грязную работу.
public void InDb(Action<BodModelContainer> workingWithDb) {
using (var dbContext = new BodModelContainer()) {
workingWithDb(dbContext);
}
}
public Member GetMemberById(int memberId) {
Member member;
InDb(dbContext => { member = dbContext.Members.Find(new[] { memberId }); });
return member;
}
Конечно, все это сказано, я не знаю, полезен ли этот уровень перенаправления / абстракции - вы делаете этонемного сложнее с небольшим ощутимым усилением (если есть).Если нет большой работы по настройке и сносу dbContext
, используемого в InDb
, я не думаю, что это очень полезно.