![](/img/trans.png)
[英]System.MissingMethodException: No parameterless constructor defined for this object
[英]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.