繁体   English   中英

System.MissingMethodException - 构造函数中的 Setter

[英]System.MissingMethodException - Setter in Constructor

我有一个单元测试,它使用 DataContext 的用户 ID 的 setter 调用存储库。 运行测试时,我遇到了System.MissingMethodException

船员库:

public CrewRepository(DataContext dataContext) : base(dataContext)
{
    dataContext.UserId = (int)UserCode.System;
}

API夹具:

services.AddDbContext<CrewAdapter.DataContext>(options => options
    .UseInMemoryDatabase("CrewUnitTestingDatabase")
    .ConfigureWarnings(x => x.Ignore(InMemoryEventId.TransactionIgnoredWarning)));

services.AddScoped<CrewRepository>(x =>
{
    // This is line 42:
    return new CrewRepository(x.GetRequiredService<CrewAdapter.DataContext>()); 
});

CrewRepositoryTests:

public void RecordExists_SequenceNumberIsGreaterThanExistingRequest_MarkAsUpdate()
{
    using (var scope = _serviceProvider.CreateScope())
    {
        APIDataBuilder.PopulateContext(scope);

        var bookingRequest = new BookingRequest
        {
            CrewStaffNumber = "TEST",
            FirstName = "Test Paul",
            MiddleName = "",
            LastName = "Test George",
            Rank = "TEST",
            Appointment = "TEST"
        };

        // This is line 218:
        var result = scope.ServiceProvider.GetRequiredService<CrewRepository>()
            .CreateBookingRequest(bookingRequest); 

        Assert.Equal((int)BookingRequestStatus.Update, result.Status);
    }
}

数据上下文:

public class DataContext : DbContext
{
    public int UserId { get; set; }
    public string ConnectionString { get; set; }

    // *bunch of entities*
}

错误信息:

[2/4/2020 8:16:50 AM 错误] [xUnit.net 00:00:01.83] Crew.Tests.Api.Repositories.CrewRequestRepositoryTests.RecordExists_SequenceNumberIsGreaterThanExistingRequest_MarkAsUpdate [失败] [2/4/2020:50:01.83]信息] [xUnit.net 00:00:01.83] System.MissingMethodException :找不到方法:'Void Crew.DataAdapter.DataContext.set_UserId(Int32)'。 [2/4/2020 8:16:50 AM 信息] [xUnit.net 00:00:01.83] 堆栈跟踪:[2/4/2020 8:16:50 AM 信息] [xUnit.net 00:00:01.83] ] 在 Repositories.CrewRepository..ctor(DataContext dataContext) [2/4/2020 8:16:50 AM 信息] [xUnit.net 00:00:01.83] C:\\Users\\source\\repos\\Crew.Tests\\Api \\APIFixture.cs(42,0):在 Crew.Tests.Api.APIFixture.<>c.<.ctor>b__4_2(IServiceProvider x) [2/4/2020 8:16:50 AM 信息] [xUnit.net 00:00:01.83] 在 lambda_method(Closure , ServiceProviderEngineScope ) [2/4/2020 8:16:50 AM Informational] [xUnit.net 00:00:01.83] 在 Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredProviderService(I , 键入 serviceType) [2/4/2020 8:16:50 AM Informational] [xUnit.net 00:00:01.83] 在 Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)[2/4/ 2020 年 8:16:50 AM 信息] [xUnit.net 00:00:01.83] C:\\Users\\source\\repos\\Crew.Tests\\Api\\Repositories\\CrewReq uestRepositoryTests.cs(218,0):在 Crew.Tests.Api.Repositories.CrewRequestRepositoryTests.RecordExists_SequenceNumberIsGreaterThanExistingRequest_MarkAsUpdate()

DataContext是一个System.Data.Linq类。 它不能有那个字段。

您需要将其传入。

public CrewRepository(MyFunkyContext dataContext) : base(dataContext)
{
    dataContext.UserId = (int)UserCode.System;
}

如果您的类实际上被命名为DataContext那么您可能需要使用完整的命名空间或using 别名来限定它,因此没有混淆。

public CrewRepository(MyNamesSpace.Somethingelse.DataContext dataContext) : base(dataContext)
{
    dataContext.UserId = (int)UserCode.System;
}

或者

using DataContext = MyNamesSpace.Somethingelse.DataContext;

public CrewRepository(DataContext dataContext) : base(dataContext)

问题似乎是它选择了错误的 DataContext。

我建议将您的DbContext命名为更具体的名称,例如MyContext

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM