c# - 使用可变参数使此方法通用

标签 c#

有什么创造性的方法可以使这个方法通用,我讨厌到处复制粘贴它:

private CoachContext GetMockContext(Mock<DbSet<LastViewedRecord>> mockSet) {
  var autoFixture = new Fixture();
  DbContextOptions<CoachContext> options = autoFixture
    .Build<DbContextOptions<CoachContext>>()
    .Create();
  var mockContext = new Mock<CoachContext>(options);
  mockContext.Setup(c => c.LastViewedRecords).Returns(mockSet.Object);
  return mockContext.Object;
}

我可以将 LastViewedRecord 变成 T 并使方法通用,但我无法绕过 c => c.LastViewedRecords

解决方案:我将方法签名更改为如下所示:

protected CreditCoachContext GetMockContext<T>(
  IQueryable<T> mockData,
  Expression<Func<CreditCoachContext,
  DbSet<T>>> contextExpression
) where T : class

最佳答案

这样的事情可能会有所帮助。 (PS:我对Fixture不太确定)

private TReturn GetMockContext<TContext, TEntity, TReturn>(Mock<DbSet<TEntity>> mockSet, 
  Expression<Func<CreditCoachContext>> contextExpression) 
    where TContext : DbContext, new() 
    where TEntity : class 
    where TReturn : class
{
  var autoFixture = new Fixture();
  DbContextOptions<TContext> options = autoFixture
    .Build<DbContextOptions<TContext>>()
    .Create();
  var mockContext = new Mock<TContext>(options);
  mockContext.Setup(contextExpression).Returns(mockSet.Object);
  return mockContext.Object;
}

关于c# - 使用可变参数使此方法通用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54295169/

相关文章:

c# - StructureMap,使用容器或对象工厂配置?

c# - C# 如何知道何时运行静态构造函数?

C# lambda else 语句

c# - Microsoft Word 2007 VSTO,在单词外创建表格?

c# - 如何使用 azure.security.keyvault 中的新 keyvault 客户端进行签名

c# - 如何从 HttpInputStream 获取 docx 文件的字节数组?

c# - 用于 C#/.NET 代码分析的 API

c# - 如果没有 c# 异常,如何处理和测试流控制?

c# - 在单个 FluentValidation 规则失败时抛出异常

c# - 维护多个设置文件