我正試圖為我的測驗創建一些租戶。我正在使用在ABP框架網站上創建的模板(.NET Core,Angular,4.4版)。在我的TestBaseModule中,我添加了以下內容:
private static void SeedTestData(ApplicationInitializationContext context)
{
AsyncHelper.RunSync(async () =>
{
using(var scope = context.ServiceProvider.CreateScope()
{
await scope.ServiceProvider
.GetRequiredService<IDataSeeder>()
.SeedAsync()。
scope.ServiceProvider // This
.GetRequiredService<TenantTestDataBuilder>() // This.
.Build(); // This.
}
});
}
而這里是TenantTestDataBuilder的代碼:
public class TenantTestDataBuilder : ITransientDependency >。
{
private readonly IRepository<Tenant, Guid> _tenantRepository;
private readonly IUnitOfWork _unitOfWork;
private readonly ITenantManager _tenantManager;
public TenantTestDataBuilder()
IRepository<Tenant, Guid> tenantRepository,
IUnitOfWork unitOfWork,
ITenantManager tenantManager)。
{
_tenantRepository = tenantRepository;
_unitOfWork = unitOfWork;
_tenantManager = tenantManager。
}
public void Build()
{
/ ...
}
}
但它未能從DI中獲得TenantTestDataBuilder,并拋出了這個例外:
[] Volo.Abp.AbpInitializationException : 在初始化OrderManagement模塊的OnApplicationInitializationModuleLifecycleContributor階段發生錯誤。 OrderManagementTestBaseModule, OrderManagement.TestBase, Version=1.0.0, Culture=neutral, PublicKeyToken=null。在激活Volo.Abp.Identity.IdentityDataSeedContributor -> Volo.Abp.Identity.IdentityDataSeeder.時拋出了一個例外while。參見內部例外for細節。
[] ---- Autofac.Core.DependencyResolutionException : 在激活Volo.Abp.Identity.IdentityDataSeedContributor -> Volo.Abp.Identity.IdentityDataSeeder時拋出一個例外。
[] -------- Autofac.Core.DependencyResolutionException : 沒有找到with Volo.Abp.Autofac. AbpAutofacConstructorFinder' on type 'Volo.Abp.Identity.IdentityDataSeeder' 可以呼叫with the available services and parameters。
[] 無法決議引數'Volo.Abb.Identity.RoleReposos'。 'Void .ctor(Volo.Abp.Guids.GuidGenerator, Volo.Abp.Identity.IIdentityRoleRepository, Volo. 身份證用戶庫, Microsoft.AspNetCore.Identity.ILookupNormalizer, Volo.Abp.Identity.IdentityUserManager, Volo.Abp.Identity.IdentityRoleManager, Volo.Abp.MultiTenancy.ICurrentTenant, Microsoft.Extensions.Options.IOptions`1[Microsoft.AspNetCore.Identity.IdentityOptions])'/span>.
[] Stack Trace:
[] at Volo.Abp.Modularity.ModuleManager.InitializeModules(ApplicationInitializationContext context)
[] at Volo.Abp.AbpApplicationBase.InitializeModules()
[] at Volo.Abp.AbpApplicationWithExternalServiceProvider.Initialize(IServiceProvider serviceProvider)
[] at Volo.Abp.Testing.AbpIntegratedTest`1..ctor()
[] /home/mahdi/Desktop/d/Repos/ordermanagement/aspnet-core/test/OrderManagement.TestBase/OrderManagementTestBase。 cs(25,0): at OrderManagement.OrderManagementTestBase`1..ctor()
[] /home/mahdi/Desktop/d/Repos/ordermanagement/aspnet-core/test/OrderManagement。 TestBase/TestData/UnitTestData_Tests.cs(14,0): at OrderManagement.TestData.UnitTestData_Tests.ctor()
[] ----- Inner Stack Trace -----
[] 在Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
[] 在Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)。
[] 在Autofac.Core.Pipeline.ResolvePipeline.Invoke(ResolveRequestContext ctxt)
[] 在 Autofac.Core.Resolving.Middleware.RegistrationPipelineInvokeMiddleware.Execute(ResolveRequestContext context, Action`1 next)
[] 在Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)。
[] 在Autofac.Core.Resolving.Middleware.SharingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
[] 在Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)。
[] 在Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)。
[] 在Autofac.Core.Resolving.Middleware.CircularDependencyDetectorMiddleware.Execute(ResolveRequestContext context, Action`1 next)
[] 在Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)。
[] 在Autofac.Core.Pipeline.ResolvePipeline.Invoke(ResolveRequestContext ctxt)
[] 在 Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, ResolveRequest request)
[] at Autofac.Core.Resolving.ResolveOperation.ExecuteOperation(ResolveRequest request)
[] at Autofac.Core.Resolving.ResolveOperation.Execute(ResolveRequest request)
[] at Autofac.Core.Lifetime.LifetimeScope.ResolveComponent(ResolveRequest request)
[] at Autofac.ResolutionExtensions.TryResolveService(IComponentContext context, Service service, IEnumerable`1 parameters, Object& instance)
[] at Autofac.ResolutionExtensions.ResolveService(IComponentContext context, Service service, IEnumerable`1 parameters)
[] 在Autofac.ResolutionExtensions.Resolve(IComponentContext context, Type serviceType, IEnumerable`1 parameters)
[] at Autofac.ResolutionExtensions.Resolve(IComponentContext context, Type serviceType)
[] 在 Autofac.Extensions.DependencyInjection.AutofacServiceProvider.GetRequiredService(Type serviceType)
[] 在Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
[] at Volo.Abp.Data.DataSeeder.SeedAsync(DataSeedContext context)
[] at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous(IInvocation invocation, IInvocationProceedInfo proceedInfo)
[] at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapter.ProceedAsync()
[] at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
[] at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter`1. InterceptAsync(IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)
[] /home/mahdi/Desktop/d/Repos/ordermanagement/aspnet-core/test/OrderManagement.TestBase/OrderManagementTestBaseModule. cs(59,0): at OrderManagement.OrderManagementTestBaseModule.<>c__DisplayClass3_0.<<SeedTestData>b__0>d.MoveNext()
[] --- 堆疊跟蹤結束 從前一個位置 ---
[] 在 Nito.AsyncEx.Synchronous.TaskExtensions.WaitAndUnwrapException(Task task)
[] at Nito.AsyncEx.AsyncContext.<>c__DisplayClass15_0.<Run>b__0(Task t)。
[] 在System.Threading.Tasks.ContinuationTaskFromTask.InnerInvoke()
[] at System.Threading.Tasks.Task.<>c.<.cctor>b__277_0(Object obj)
[] 在System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
[] ---堆疊跟蹤結束 從上一個位置 ---
[] 在 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
[] 在System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
[] ---堆疊跟蹤結束 從前一個位置 ---
[] at Nito.AsyncEx.Synchronous.TaskExtensions.WaitAndUnwrapException(Task task)
[] at Nito.AsyncEx.AsyncContext.Run(Func`1 action)
[] at Volo.Abp.Threading.AsyncHelper.RunSync(Func`1 action)
[] /home/mahdi/Desktop/d/Repos/ordermanagement/aspnet-core/test/OrderManagement.TestBase/OrderManagementTestBaseModule。 cs(55,0): at OrderManagement.OrderManagementTestBaseModule.SeedTestData(ApplicationInitializationContext context)
[] /home/mahdi/Desktop/d/Repos/ordermanagement/aspnet-core/test/OrderManagement.TestBase/OrderManagementTestBaseModule。 cs(50,0): at OrderManagement.OrderManagementTestBaseModule.OnApplicationInitialization(ApplicationInitializationContext context)
[] at Volo.Abp.Modularity.OnApplicationInitializationModuleLifecycleContributor.Initialize(ApplicationInitializationContext context, IAbpModule module)
[] at Volo.Abp.Modularity.ModuleManager.InitializeModules(ApplicationInitializationContext context)
[] ----- Inner Stack Trace -----
[] 在Autofac.Core.Activators.Reflection.ReflectionActivator.GetAllBindings(ConstructorBinder[] availableConstructors, IComponentContext context, IEnumerable`1 parameters)
[] 在Autofac.Core.Activators.Reflection.ReflectionActivator.ActivateInstance(IComponentContext context, IEnumerable`1 parameters)
[] 在Autofac.Core.Activators.Reflection.ReflectionActivator.<ConfigurePipeline>b__11_0(ResolveRequestContext ctxt, Action`1 next)
[] 在Autofac.Core.Resolving.Middleware.DelegateMiddleware.Execute(ResolveRequestContext context, Action`1 next)
[] 在Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)。
[] 在Autofac.Core.Resolving.Middleware.DisposalTrackingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
[] 在Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)。
[] 在Autofac.Builder.RegistrationBuilder`3. <>c__DisplayClass41_0.<PropertiesAutowired>b__0(ResolveRequestContext ctxt, Action`1 next)
[] at Autofac.Core.Resolving.Middleware.DelegateMiddleware.Execute(ResolveRequestContext context, Action`1 next)
[] 在Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)。
[] 在Autofac.Extras.DynamicProxy.RegistrationExtensions.<>c__DisplayClass8_0`3。 <EnableInterfaceInterceptors>b__1(ResolveRequestContext ctxt, Action`1 next)
[] 在Autofac.Core.Resolving.Middleware.DelegateMiddleware.Execute(ResolveRequestContext context, Action`1 next)
[] 在Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)。
[] 在Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
[] 完成了。 訂單管理.TestBase
----- 測驗執行摘要 -----
什么是錯的?我正在像ABP框架的AbpTenantManagementTestBaseModule那樣做。
。以下是我從https://abp.io/get-started
中使用的模板。- 專案型別。應用程式 UI框架。Angular
- 資料庫提供者。Entity Framework Core
- 資料庫管理系統。MySQL
- 移動。ReactNative
- 獨立的身份服務器。已檢查
運行的作業系統。Ubuntu 20.04
uj5u.com熱心網友回復:
無法解決引數'Volo.Abb.Identity.IIdentityRoleRepository roleRepository' ...
...
.../ordermanagement/aspnet-core/test/OrderManagement.TestBase/TestData/UnitTestData_Tests.cs(14,0): at OrderManagement.TestData.UnitTestData_Tests..ctor()
你不應該在OrderManagement.TestBase專案中寫測驗。
將OrderManagement.TestBase/TestData/UnitTestData_Tests.cs
移到OrderManagement.TestBase專案中。
到OrderManagement.EntityFrameworkCore.Tests/TestData/UnitTestData_Tests.cs
// public class UnitTestData_Tests: OrderManagementTestBase<OrderManagementTestBaseModule>/span>
public class UnitTestData_Tests: OrderManagementEntityFrameworkCoreTestBase。
uj5u.com熱心網友回復:
不要改變你的SeedTestData方法。因為它是負責你的測驗資料的種子。你不需要添加TenantTestDataBuilder來播種你的租戶相關資料。它也負責這個作業。
private static void SeedTestData(ApplicationInitializationContext context)
{
AsyncHelper.RunSync(async () =>
{
using(var scope = context.ServiceProvider.CreateScope()
{
await scope.ServiceProvider
.GetRequiredService<IDataSeeder>()
.SeedAsync()。
}
});
}
你只需要在YourTestDataSeedContributor類的SeedAsyncMethod中播種你的資料。
public class YourTestDataSeedContributor : IDataSeedContributor,ITransientDependency。
{
private readonly ITenantRepository _tenantRepository;
private readonly IUnitOfWork _unitOfWork;
private readonly ITenantManager _tenantManager;
public YourTestDataSeedContributor(ITenantRepository tenantRepository, IUnitOfWork unitOfWork, ITenantManager tenantManager)
{
_tenantRepository = tenantRepository;
_unitOfWork = unitOfWork;
_tenantManager = tenantManager。
}
public async Task SeedAsync(DataSeedContext context)
{
await AddTenantsAsync()。
}
public async Task AddTenantsAsync() ?
{
var testData = new OrderManagementTestData()。
var tenant = await CreateTenantAsync(testData.DefaultTenantName)。
}
private async Task<Tenant> CreateTenantAsync(string name)?
{
var tenant = await _tenantManager.CreateAsync(name)。
await _tenantRepository.InsertAsync(tenant);
await _unitOfWork.SaveChangesAsync()。
return tenant;
}
當你在SeedAsyncMethod中播種你的資料后,你可以在測驗中使用它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/328078.html
標籤:
