我有一个常见的封装,我一直在我的控制器中用来处理警报消息传递,异常和错误记录。这是一个简单的版本:
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));
我应该如何构建返回操作的方法?
答案 0 :(得分:1)
我怀疑你只是想要:
public Action<T> Builder<T>() where T : DbContext
然后你可以把它称为:
Action<SpecificDbContext> actionHelper = Builder<SpecificDbContext>();
您不需要type
参数,因为您可以使用typeof(T)
方法。但是: